c# - 我的类似乎没有与 API 的 JSON 响应正确映射,没有绑定(bind)

标签 c# json json.net

我在反序列化 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; }
}

注意示例中的注释。

因此,要解决您的问题,请删除所有 DataContractDataMember 属性

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/

相关文章:

c# - 在 DataTable 中分组 Column sum

java - org.json.JSONObject 类型的响应无法转换为 JSONArray

c# - 如何解析 Json.NET 多态对象?

c# - Newtonsoft JSON.NET 与 Json Web 服务的兼容性

javascript - 创建多个 Microsoft Bot 实例,轮询它们的可用性,使用 DirectLine API、.Net 和 JS?

c# - 无法从程序集加载类型(C# Amazon lambda 函数)

c# - 使用另一个被测试的函数来为实际测试做准备是不是单元测试的好方法?

java - 使用java创建json对象

php - Laravel : Cant set JSON utf-8 charset

c# - 更改单个 ASP.NET Core Controller 的 JSON 序列化设置