2017-07-19 162 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); 

我回去:

[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%匹配,然後將dt映射到域對象。 – JOSEFtw

回答

2

你omittted從基類的[DataContract]屬性。此代碼重現該問題:

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]屬性。