1

Я пытался сериализовать класс (см. Ниже), который наследует от List<int> и имеет поля, которые предоставляют дополнительную информацию.DataContractSerializer игнорирует поля в подклассе Collections

Первоначально, я использовал 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; } 
}