使用XmlSerializer将schemaLocation添加到XML序列化List <t>

时间:2016-01-13 10:28:47

标签: c# xml

我在序列化schemaLocation时尝试将List<T>属性添加到XML根元素。如果我只序列化一个对象但在列表上不起作用,则代码可以正常工作。我目前的代码:

public class SomeObject
{
    public int Id { get; set; }
    public string Name { get; set; }
}
public class XmlListContainer<T> : List<T>
{
    [XmlAttribute(Namespace = XmlSchema.InstanceNamespace)]
    public string schemaLocation = "http :// localhost/someschema";
}
public class BuildXml
{
    public static void GetXml()
    {
        var list = new XmlListContainer<SomeObject>()
        {
            new SomeObject() { Id = 1, Name = "One" },
            new SomeObject() { Id = 2, Name = "Two" },
        };
        var objectToXml = list;
        string output;
        using (var writer = new StringWriter())
        {
            var xs = new XmlSerializer(objectToXml.GetType());
            var nameSpaces = new XmlSerializerNamespaces();
            nameSpaces.Add("xsi", "http :// www.w3.org/2001/XMLSchema-instance");
            xs.Serialize(writer, objectToXml, nameSpaces);
            output = writer.GetStringBuilder().ToString();
            writer.Close();
        }
        Console.WriteLine(output);
    }
}

XML根元素不带schemaLocation

<ArrayOfSomeObject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

如果我将代码更改为

public class SomeObject
{
    public int Id { get; set; }
    public string Name { get; set; }
    [XmlAttribute(Namespace = XmlSchema.InstanceNamespace)]
    public string schemaLocation = "http :// localhost/someschema";
}
...
var objectToXml = new SomeObject() { Id = 1, Name = "One" };

...一切看起来不错,但我需要清单

<SingleObject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://localhost/someschema">

序列化schemaLocation时是否可以添加List<T>属性?

0 个答案:

没有答案