DataContractSerializer忽略集合的子类中的字段

时间:2016-10-26 05:47:14

标签: c# serialization collections subclass datacontractserializer

我一直在尝试序列化一个类(见下文),该类继承自List<int>并且具有提供额外信息的字段。

最初,我一直在使用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]);
}

谢谢, 诺亚

2 个答案:

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

答案 1 :(得分:0)

您需要创建一个包含所有对象或属性的DTO

[DataContract]
class ResponseDTO 
{

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

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