gpt4 book ai didi

c# - 如何在 C# 中使用 RestSharp 反序列化动态 json 属性?

转载 作者:行者123 更新时间:2023-12-02 15:56:34 25 4
gpt4 key购买 nike

我有一个具有以下结构的网络服务(我无法编辑):

/用户

{
"response" : {
"users": [{"name": "John"},{"name": "Jack"}]
},
"page" : { "current":1, "total":1}
}

/宠物

{
"response" : {
"pets": [{"name": "Fido"},{"name": "Tweety"}]
},
"page" : { "current":1, "total":1}
}

正如您所看到的,“响应”属性中的属性名称发生了变化。如何使用 RestSharp 反序列化通用响应?我不想为每个资源编写一个 Response 类。

我编写了以下通用响应类

class RestResponse{
public ResponseBody response { get; set; }
public ResponsePage page { get; set; }
}

class ResponseBody {
public List<dynamic> resourceList { get; set; }
}

class ResponsePage {
public int current { get; set; }
public int total { get; set; }
}

class User { public string name {get; set;} }

class Pet { public string name {get; set;} }

当然,RestSharp 无法将动态 json 属性与 ResponseBody.list 属性链接起来。我怎样才能做到这一点?

最佳答案

我首先要说的是,这根本不优雅:

您可以使用

获取原始 JSON 响应
RestResponse response = client.Execute(request);
var jsonString = response.Content; // raw content as string

从那里开始,您可以使用 JSON.NET 进行查询。像这样:

var jObject = JObject.Parse(jsonString);
// this could probably be written nicer, but you get the idea...
var resources = jObject ["response"]["users"].Select(t => t["name"]);

resources 将保存您的姓名列表。这是丑陋的、不灵活的,我不推荐它。

最好坚持使用巧妙的继承和自定义类。它更具可读性,并且您的响应对象可能不会全部只有一个属性,对吗?

关于c# - 如何在 C# 中使用 RestSharp 反序列化动态 json 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32478208/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com