Xml使用嵌套List自定义List的序列化

时间:2014-10-28 15:55:01

标签: c# xml serialization

我已经在这里(以及其他地方)看过这个问题的任何答案,但我还没找到任何答案。

我有一个派生自List的类,并包含另一个List。当我序列化为XML时,不包括内部集合的内容。

这是一个非常简单的例子:

[Serializable()]
public class MyList<T> : List<T>
{
    protected List<T> _nestedList= new List<T>();

    public List<T> NestedList
    {
        get { return _nestedList; }
        set { _nestedList = value; }
    }
}

class Program
{
    static void Main(string[] args)
    {
        MyList<int> ints = new MyList<int>();
        ints.Add(1);
        ints.Add(2);
        ints.NestedList.Add(3);
        ints.NestedList.Add(4);

        string xml;
        var xmlSerializer = new XmlSerializer(ints.GetType());
        using (var memoryStream3 = new MemoryStream())
        {
            xmlSerializer.Serialize(memoryStream3, ints);
            xml = Encoding.UTF8.GetString(memoryStream3.ToArray());
        }
    }
}

这里是xml字符串:

<?xml version="1.0"?>
<ArrayOfInt xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <int>1</int>
  <int>2</int>
</ArrayOfInt>

注意缺少NestedList。

我已尝试过NestedList上的各种属性,例如XmlArray或XmlArrayItem,但那些没有用。

我也知道这不会正确地反序列化。真正的模型比这更复杂;此集合位于另一个对象内,该对象也标记为Serializable。

行为是相同的:外部列表序列化,但内部序列没有。我试图缩小问题的范围,所以我提出了这个较小的例子。

提前致谢!

编辑:看起来这是设计的,并且XmlSerializer在序列化期间不包含集合的属性。所以我必须进行自定义序列化。

1 个答案:

答案 0 :(得分:0)

只是为了将其标记为已回答,它是按照XmlSerializer中的设计进行的。