将对象序列化为XML,包括“ xsi:schemaLocation”和属性顺序

时间:2018-09-13 19:34:49

标签: c# xmlserializer

我有这堂课

public class EnvioDTE
{
    [XmlAttribute]
    public string version { get; set; }

    public EnvioDTE()
    {
        this.version = "1.0";
    }
}

我正在使用以下代码将其序列化为XML:

EnvioDTE envioDTE = new EnvioDTE();

string xml = "";

var serializer = new XmlSerializer(typeof(EnvioDTE));
var settings = new XmlWriterSettings
{
    Indent = true,
    NewLineChars = "\n",
    OmitXmlDeclaration = false,
    Encoding = Encoding.GetEncoding("ISO-8859-1")
};

using (var stream = new MemoryStream())
{
    using (var xmlWriter = XmlWriter.Create(stream, settings))
    {
        serializer.Serialize(xmlWriter, this);
        xml = Encoding.GetEncoding("ISO-8859-1").GetString(stream.ToArray());
    }
}

Console.WriteLine(xml);

哪个给我以下XML:

<?xml version="1.0" encoding="iso-8859-1"?>
<EnvioDTE version="1.0">
</EnvioDTE>

我需要添加什么代码才能获得以下属性?

<?xml version="1.0" encoding="iso-8859-1"?>
<EnvioDTE xmlns="http://www.sii.cl/SiiDte" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sii.cl/SiiDte EnvioDTE_v10.xsd" version="1.0">
</EnvioDTE>

属性的顺序对我来说很重要。



我尝试进行两项更改:

更改#1

[XmlRoot(Namespace = "http://www.sii.cl/SiiDte")] // *** NEW
public class EnvioDTE
{
    [XmlAttribute("schemaLocation", Namespace = "http://www.w3.org/2001/XMLSchema-instance")] // *** NEW
    public string schemaLocation { get; set; } // *** NEW
    [XmlAttribute]
    public string version { get; set; }

    public EnvioDTE()
    {
        this.version = "1.0";
    }
}

更改#2

EnvioDTE envioDTE = new EnvioDTE();

string xml = "";

var namespaces = new XmlSerializerNamespaces(); // *** NEW
namespaces.Add("xsi", "http://www.w3.org/2001/XMLSchema-instance"); // *** NEW

var serializer = new XmlSerializer(typeof(EnvioDTE));
var settings = new XmlWriterSettings
{
    Indent = true,
    NewLineChars = "\n",
    OmitXmlDeclaration = false,
    Encoding = Encoding.GetEncoding("ISO-8859-1")
};

using (var stream = new MemoryStream())
{
    using (var xmlWriter = XmlWriter.Create(stream, settings))
    {
        serializer.Serialize(xmlWriter, this, namespaces); // *** NEW
        xml = Encoding.GetEncoding("ISO-8859-1").GetString(stream.ToArray());
    }
}

Console.WriteLine(xml);

有了这些更改,我得到了:

<?xml version="1.0" encoding="iso-8859-1"?>
<EnvioDTE xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sii.cl/SiiDte EnvioDTE_v10.xsd" version="1.0" xmlns="http://www.sii.cl/SiiDte">
</EnvioDTE>

那不是我想要的属性的顺序...

0 个答案:

没有答案