【发布时间】:2015-04-21 16:42:28
【问题描述】:
我正在使用以下代码将多个类序列化为 XML 文件
static void GetFromDBToXml()
{
var thejob = Xmltodb.Singleton.DBManager.GetSingleObject<job>("jobid", JobData.Job.Jobid);
var theparts = Xmltodb.Singleton.DBManager.GetListOfObjects<parts>("jobid", JobData.Job.Jobid);
var thesurv = Xmltodb.Singleton.DBManager.GetListOfObjects<jobsurvey>("jobid", JobData.Job.Jobid);
try
{
using (var fs = new FileStream(Path.Combine(Xmltodb.Singleton.ContentDirectory, "temp.xml"), FileMode.OpenOrCreate))
{
var xmlSerializer = new XmlSerializer(typeof(job));
xmlSerializer.Serialize(fs, thejob);
xmlSerializer = new XmlSerializer(typeof(parts));
foreach (var p in theparts)
xmlSerializer.Serialize(fs, p);
xmlSerializer = new XmlSerializer(typeof(jobsurvey));
foreach (var s in thesurv)
xmlSerializer.Serialize(fs, s);
}
}
catch (InvalidOperationException ex)
{
Console.WriteLine("Can't write the xml file : {0}--{1}", ex.Message, ex.StackTrace);
}
}
代码直接从 SQLite 中提取并写入 XML 文件。
虽然这可行,但在每个类的末尾和下一个类的开始,我每次都会添加 XML 标头。换句话说
</jobsurvey>
<?xml version="1.0" encoding="utf-8">
<parts xmlns:xsi="http://www.w3.org ...
有没有办法防止序列化程序为每个正在序列化的类生成 <?xml 和 xmlns: 部分,而无需创建文件,然后重新解析以删除我不需要的这些位?
【问题讨论】:
-
您应该输出有效的 xml。有效的 xml 在顶部有一个 xml 版本,并且只有一个根元素。你违反了两者。解决方案通常是创建一个代表 xml 根的类型,为每个工作、部件和工作调查添加一个属性,设置它们,然后序列化这个实例。
-
使用 OmitXmlDeclarations =true 进行设置,如 stackoverflow.com/questions/1772004/…