C# XML序列化程序是否可以更改为不输出XML版本?
我正在使用以下代码将一些类序列化为XML文件C# XML序列化程序是否可以更改为不输出XML版本?,c#,xml,C#,Xml,我正在使用以下代码将一些类序列化为XML文件 static void GetFromDBToXml() { var thejob = Xmltodb.Singleton.DBManager.GetSingleObject<job>("jobid", JobData.Job.Jobid); var theparts = Xmltodb.Singleton.DBManager.GetListOfObjects<parts>("jobid
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);
}
}
static void GetFromDBToXml()
{
var thejob=Xmltodb.Singleton.DBManager.GetSingleObject(“jobid”,JobData.Job.jobid);
var theparts=Xmltodb.Singleton.DBManager.GetListOfObjects(“jobid”,JobData.Job.jobid);
var thesurv=Xmltodb.Singleton.DBManager.GetListOfObjects(“jobid”,JobData.Job.jobid);
尝试
{
使用(var fs=newfilestream(Path.Combine(Xmltodb.Singleton.ContentDirectory,“temp.xml”)、FileMode.OpenOrCreate)
{
var xmlSerializer=新的xmlSerializer(typeof(job));
Serialize(fs,thejob);
xmlSerializer=新的xmlSerializer(typeof(parts));
foreach(部分中的var p)
serializer.Serialize(fs,p);
xmlSerializer=新的xmlSerializer(typeof(jobsurvey));
foreach(SURV中的var s)
serializer.Serialize(fs,s);
}
}
捕获(无效操作异常ex)
{
WriteLine(“无法写入xml文件:{0}--{1}”,例如Message,例如StackTrace);
}
}
代码直接从SQLite中提取并写入XML文件
虽然这样做有效,但在每个类结束和下一个类开始时,我每次都会添加XML头。换句话说
</jobsurvey>
<?xml version="1.0" encoding="utf-8">
<parts xmlns:xsi="http://www.w3.org ...
你可以试试这样的。
这里重要的是XMLWriterSettings和XmlSerializerNamespaces
XmlWriterSettings settings = new XmlWriterSettings();
settings.OmitXmlDeclaration = true;
MemoryStream ms = new MemoryStream();
XmlWriter writer = XmlWriter.Create(ms, settings);
XmlSerializerNamespaces names = new XmlSerializerNamespaces();
names.Add("", "");
XmlSerializer cs = new XmlSerializer(typeof(Cat));
cs.Serialize(writer, new Cat { Lives = 9 }, names);
ms.Flush();
ms.Seek(0, SeekOrigin.Begin);
StreamReader sr = new StreamReader(ms);
var xml = sr.ReadToEnd();
您应该输出有效的xml。有效的xml在顶部有一个xml版本,并且只有一个根元素。你两个都违反了。通常,解决方案是创建一个表示xml根的类型,为每个作业、部件和jobsurvey添加一个属性,设置它们,然后序列化此实例