2014-10-28 103 views
0

我已经看过这里(和其他地方)的任何问题的答案,我还没有找到任何东西。Xml使用嵌套列表的自定义列表的序列化

我有一个派生自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,但这些都不起作用。

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

行为是一样的:外部列表序列化,但内部没有。我试图缩小这个问题的范围,所以我正在展示这个较小的例子。

在此先感谢!

编辑:它看起来像这是设计,并且XmlSerializer不包括在序列化过程中的集合的属性。所以我不得不做自定义序列化。

+0

可能的重复[当一个类从List <>继承时,XmlSerializer不会序列化其他属性](http://stackoverflow.com/questions/5069099/when-a-class-is-inherited-from-列表XmlSerializer的-犯规序列化,其他-ATT) – BartoszKP 2014-10-28 17:19:33

回答

0

只要将其标记为已回答,就是在XmlSerializer中设计的。