我在反序列化 JSON 响应时遇到问题。
userResponse = JsonConvert.DeserializeObject<UserResponse>(result);
json 响应如下:
{
"Results" : [
{
"Id" : 1,
"Name" : "John",
"Age" : 50
}
],
"Paging" : {
"TotalPages" : 5,
"CurrentPage" : 1
}
}
假设绑定(bind)到上面的 JSON 的我的 UserResponse 类如下所示:
[DataContract]
public class UserResponse
{
[DateMember(Name = "Results" )]
public List<User> Results {get;set;}
[DateMember(Name = "Paging" )]
public Paging Paging {get;set;}
}
[DataContract]
public class User
{
public int Id {get;set;}
public string Name {get;set;}
public int Age {get;set;}
}
[DataContract]
public class Paging
{
public int TotalPages {get;set;}
public int CurrentPage {get;set;}
}
当前的 UserResponse 看起来有什么问题吗? 我不确定为什么它没有正确绑定(bind)。
userResponse 对象返回时不为空,但属性的值为空。
最佳答案
因为您正在使用 DataContract
,所以您还需要在其他类中包含 DataMember
属性。使用 DataContract
是全部或全部。
如果您查看有关 DataContract and DataMember Attributes 的 Json.Net 文档
[DataContract]
public class File
{
// excluded from serialization
// does not have DataMemberAttribute
public Guid Id { get; set; }
[DataMember]
public string Name { get; set; }
[DataMember]
public int Size { get; set; }
}
注意示例中的注释。
因此,要解决您的问题,请删除所有 DataContract
和 DataMember
属性
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
public class Paging
{
public int TotalPages { get; set; }
public int CurrentPage { get; set; }
}
public class UserResponse
{
public List<User> Results { get; set; }
public Paging Paging { get; set; }
}
或用它们各自的属性正确装饰所有东西。
[DataContract]
public class User {
[DataMember]
public int Id { get; set; }
[DataMember]
public string Name { get; set; }
[DataMember]
public int Age { get; set; }
}
[DataContract]
public class Paging {
[DataMember]
public int TotalPages { get; set; }
[DataMember]
public int CurrentPage { get; set; }
}
[DataContract]
public class UserResponse {
[DataMember]
public List<User> Results { get; set; }
[DataMember]
public Paging Paging { get; set; }
}
关于c# - 我的类似乎没有与 API 的 JSON 响应正确映射,没有绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44952768/