1

我一直試圖序列化一個類(見下文),它從List<int>繼承而來,並且具有提供額外信息的字段。DataContractSerializer忽略集合的子類中的字段

最初,我一直在使用XmlSerializer,但我在那裏也遇到了問題。

根據this post這是設計與XmlSerializer不序列字段,但DataContractSerializer應該工作。

任何建議將不勝感激!

[CollectionDataContract] 
public class Group : List<int> 
{ 
    [DataMember] 
    public string Key { get; set; } 
} 

static void Main() 
{ 
    Group test = new Group { Key = "Test key" }; 
    test.Add(60); 

    DataContractSerializer serializer = new DataContractSerializer(typeof(Group)); 
    MemoryStream stream = new MemoryStream(); 

    serializer.WriteObject(stream, test); 

    stream.Position = 0; 
    test = serializer.ReadObject(stream) as Group; 
    Console.WriteLine("{0}: {1}", test.Key ?? "No luck", test[0]); 
} 

感謝, 諾亞

回答

0

這是預期的行爲。當從一個集合派生時,只有基類將被序列化:)我建議創建一個基類包裝類。

[DataContract] 
class SuperWrapper { 
    private List<int> _myList; 
    private string _name; 

    [DataMember] 
    public List<int> Items { get { return _items; } set { _items = value; } } 

    [DataMember] 
    public string Name { get { return _name; } set { _name = value; } } 
} 
+0

不幸的是我需要公開的對象以這種方式的所有對象或屬性。我想我將不得不實現一個包裝器來提供我需要的接口,然後序列化的一部分必須是將對象轉化爲你所提到的東西。謝謝! – noah

0

你需要創建一個DTO其中將包含

[DataContract] 
class ResponseDTO 
{ 

    [DataMember] 
    public List<int> ListData{ get ;set; } 

    [DataMember] 
    public string Key{ get ;set; } 
}