Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# XML序列化程序是否可以更改为不输出XML版本?_C#_Xml - Fatal编程技术网

C# 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

我正在使用以下代码将一些类序列化为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);
        }
    }
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添加一个属性,设置它们,然后序列化此实例