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; } 
}