如何在 C# 中访问 Json(这是 HttpMessage 的结果)?
Posted
技术标签:
【中文标题】如何在 C# 中访问 Json(这是 HttpMessage 的结果)?【英文标题】:How to access Json (which was a result of HttpMessage) in C#? 【发布时间】:2021-11-16 21:19:30 【问题描述】:我正在用 .NET 编写两个应用程序(Web API)。从应用程序 A 我想使用 Http 请求在应用程序 B 的控制器中调用一个方法。 这里
using (var askPensionerDetails = new HttpClient())
double pensionToDisburse = 0;
askPensionerDetails.BaseAddress = new Uri("http://localhost:55345/api/pensionerdetails/");
var responseTask = askPensionerDetails.GetAsync("getById?pan=" + inputOfPensioner.PAN);
responseTask.Wait();
var result =responseTask.Result ;
if (result.IsSuccessStatusCode)
var readTask = result.Content.ReadFromJsonAsync<object>();
readTask.Wait();
return Ok(readTask.Result);
邮递员的输出是
"name": "bunk seenu",
"dateOfBirth": "1990-01-02T00:00:00",
"pan": "ABCD12351E",
"salaryEarned": 45000,
"allowances": 500,
"pensionType": 1,
"bankDetails":
"bankName": "SBI",
"accountNumber": "SBI00001BS",
"bankType": 0
这是一个理想的输出。但问题是如何访问bankdetails、name、pan、salaryEarned等属性。
我尝试过使用 readTask.Result["name"] 但它抛出错误。
我也尝试过使用 result.Content.ReadAsStringASync(); 但是邮递员的输出是
"name": [],
"dateOfBirth": [],
"pan": [],
"salaryEarned": [],
"allowances": [],
"pensionType": [],
"bankDetails": [
[
[]
],
[
[]
],
[
[]
]
]
对于语句 readTask = result.Content.ReadFromJsonAsync();,我没有与 Json 结果类型关联的类; (根据设计限制)。
【问题讨论】:
【参考方案1】:来自docs:
如果您有想要反序列化的 JSON,但没有将其反序列化的类,则除了手动创建所需的类之外,您还有其他选择:
反序列化为 JSON DOM (document object model) 并从 DOM 中提取您需要的内容。
DOM 允许您导航到 JSON 有效负载的子部分并反序列化单个值、自定义类型或数组。有关 .NET 6 中的 JsonNode DOM 的信息,请参阅 Deserialize subsections of a JSON payload。有关JsonDocument DOM 的信息,请参阅How to search a JsonDocument and JsonElement for sub-elements。
直接使用Utf8JsonReader。
使用 Visual Studio 2019 自动生成你需要的类:
复制需要反序列化的 JSON。 创建类文件并删除模板代码。 选择编辑 > 选择性粘贴 > 将 JSON 粘贴为类。结果是一个可用于反序列化目标的类。
【讨论】:
嘿,效果很好。感谢您的回复:)【参考方案2】:你可以使用 Newtonsoft.Json
JObject jo = JObject.Parse(readTask.Result);
var name = jo["name"];
if(string.IsNnullOrEmpty(name))
///some code
【讨论】:
您好,感谢您的回复。但这没有用。结果是 ValueKind :[] dotnetfiddle.net/Ki2WgU# 这是示例。以上是关于如何在 C# 中访问 Json(这是 HttpMessage 的结果)?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 c# 从 ajax 中的嵌套 JSON 对象中获取值