2014-10-28 100 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中設計的。