1

私はList<int>から継承し、余分な情報を提供するフィールドを持つクラス(下記参照)をシリアル化しようとしています。DataContractSerializerは、コレクションのサブクラスのフィールドを無視します

元々、私はXmlSerializerを使用していましたが、そこにも問題がありました。

this postによれば、フィールドをシリアライズしませんが、DataContractSerializerが動作するはずXmlSerializerとの設計によるものです。

ご意見をいただければ幸いです!

[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

は、残念ながら、私はこの方法でオブジェクトを公開するために必要なすべてのオブジェクトやプロパティが含まれますDTOを作成する必要があります。私は必要なインターフェイスを提供するためにラッパーを実装しなければならないと思うので、シリアライゼーションの一部はあなたが言及したようなものにオブジェクトを回す必要があります。ありがとう! – noah

0

あなたが

[DataContract] 
class ResponseDTO 
{ 

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

    [DataMember] 
    public string Key{ get ;set; } 
} 
関連する問題