当我尝试反序列化对象列表时遇到问题。除了我的基类“BusinessObjectBaseId”继承的属性之外,对象中的所有属性都被反序列化。为什么“Id”属性不会被反序列化? (以下是我的代码/工作流程)
基地:
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
答案 0 :(得分:2)
您已经从基类中省略了[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]
属性。