C#-对象列表的反序列化,不';t反序列化继承的属性

C#-对象列表的反序列化,不';t反序列化继承的属性,c#,json,json.net,deserialization,C#,Json,Json.net,Deserialization,我在尝试反序列化对象列表时遇到问题。除基类“BusinessObjectBaseId”继承的属性外,对象中的所有属性都是反序列化的。为什么“Id”属性不能反序列化?(以下是我的代码/工作流程) 基数: 对象: public class NameAssociation : BusinessObjectBaseId { [DataMember] public string Name { get; set; } } Json对象: [{"Name":"Joe","Id":"10eea

我在尝试反序列化对象列表时遇到问题。除基类“BusinessObjectBaseId”继承的属性外,对象中的所有属性都是反序列化的。为什么“Id”属性不能反序列化?(以下是我的代码/工作流程)

基数:

对象:

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]
属性。该代码再现了该问题:

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]
[DataMember]
属性。

您已经从基类中省略了
[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]
[DataMember]
属性。

这可能是因为JSON Id中是字符串,而DTO中是GUID,请尝试将其更改为字符串,看看是否有效。理想情况下,您希望DTO与json 100%匹配,然后将DTO映射到域对象。这可能是因为在json Id中是一个字符串,在DTO中是一个GUID,请尝试将其更改为字符串,然后查看它是否有效。理想情况下,您希望DTO与json 100%匹配,然后将DTO映射到域对象。
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; }
}