2017-07-19 20 views
0

オブジェクトのリストを逆シリアル化しようとすると問題が発生します。オブジェクトのすべてのプロパティは、基本クラス "BusinessObjectBaseId"によって継承されるプロパティを除いて逆シリアル化されます。なぜ "Id"プロパティは直列化解除されませんか? (以下は、私のコード/ワークフロー)C# - オブジェクトのリストの逆シリアル化は、継承されたプロパティを逆シリアル化しません。

ベース:

public abstract class BusinessObjectBaseId : BusinessObjectBase 
{ 
    [DataMember] 
    public virtual Guid Id { get; set; } 
} 

オブジェクト:

public class NameAssociation : BusinessObjectBaseId 
{ 
    [DataMember] 
    public string Name { get; set; } 
} 

JSONオブジェクト:私は呼ん

[{"Name":"Joe","Id":"10eea25b-16aa-42d6-950a-4c28cb0537f4"},{"Name":"Fred","Id":"a913f4b4-1c82-4d19-ade8-949227ac7d08"}] 

List<NameAssociation> list = JsonConvert.DeserializeObject<List<NameAssociation>>(jsonData); 

私が取り戻す:あなたは、基本クラスから[DataContract]属性をomitttedまし

[0] : Name: Joe, Id: 00000000-0000-0000-0000-000000000000 
[1] : Name: Fred, Id: 00000000-0000-0000-0000-000000000000 
+1

これは、JSON Idが文字列であるため、DTOではGUIDであるため、文字列に変更して動作するかどうかを確認してください。理想的には、dtosがjson 100%と一致するようにしてから、dtosをドメインオブジェクトにマップします。 – JOSEFtw

答えて

2

。このコードは、問題を再現:

namespace StackOverflow45198156 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string json = "[{\"Name\":\"Joe\",\"Id\":\"10eea25b-16aa-42d6-950a-4c28cb0537f4\"},{\"Name\":\"Fred\",\"Id\":\"a913f4b4-1c82-4d19-ade8-949227ac7d08\"}]"; 

      var list = JsonConvert.DeserializeObject<List<NameAssociation>>(json); 
     } 
    } 

    public abstract class BusinessObjectBaseId 
    { 
     [DataMember] 
     public Guid Id { get; set; }  
    } 

    [DataContract] 
    public class NameAssociation : BusinessObjectBaseId 
    { 
     [DataMember] 
     public string Name { get; set; } 
    } 
} 

そして、これはそれを修正します。

[DataContract] 
public abstract class BusinessObjectBaseId 
{ 
    [DataMember] 
    public Guid Id { get; set; } 
} 

か、完全にすべての[DataContract][DataMember]属性を省略します。

関連する問題