在 C# 中解析 JSON 错误响应
Parsing JSON error response in c#
我正在尝试找出一种在 C# 中解析 JSON 错误消息的方法。
我可以收到如下所示的回复:
{
"errors": {
"title": ["can't be blank"]
}
}
或
{
"errors": {
"inventory_policy": ["is not included in the list"]
}
}
或者我可能会在响应中收到不止一个错误。
我如何才能在 C# 中解析那种动态响应?每个错误消息的密钥都不同。我可以将它反序列化为一个对象,该对象只有一个名为错误的字符串字典吗?
您可以将 json 反序列化为动态变量并访问对象
中的 属性
dynamic dynJson = JsonConvert.DeserializeObject(json);
foreach (var item in dynJson)
{
// access dynamic property here
}
试试这个
var JsonObj = JObject.Parse(json);
foreach(var keyvaluepair in JsonObj.Cast<KeyValuePair<string,JToken>>().ToList())
{
//keyvaluepair.Key
//keyvaluepair.Value
}
JObject class 有一个包含这些属性的内部字典。可以枚举它的实例,并且可以访问每个子对象。这是一个示例代码:
string input = "{ \"errors\": { \"title\": [\"can't be blank\"] }}";
JObject json = JObject.Parse(input);
foreach (var item in json)
{
Console.WriteLine($"{item.Key} _ {item.Value}");
}
JObject class 是在 Newtonsoft.Json 包中定义的,要从您的项目中引用它,您需要在 csproj 文件中添加以下包引用(或者自己做)使用 Nuget 包管理器):
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="10.0.3" />
</ItemGroup>
希望这会有所帮助!
我正在尝试找出一种在 C# 中解析 JSON 错误消息的方法。 我可以收到如下所示的回复:
{
"errors": {
"title": ["can't be blank"]
}
}
或
{
"errors": {
"inventory_policy": ["is not included in the list"]
}
}
或者我可能会在响应中收到不止一个错误。
我如何才能在 C# 中解析那种动态响应?每个错误消息的密钥都不同。我可以将它反序列化为一个对象,该对象只有一个名为错误的字符串字典吗?
您可以将 json 反序列化为动态变量并访问对象
中的 属性dynamic dynJson = JsonConvert.DeserializeObject(json);
foreach (var item in dynJson)
{
// access dynamic property here
}
试试这个
var JsonObj = JObject.Parse(json);
foreach(var keyvaluepair in JsonObj.Cast<KeyValuePair<string,JToken>>().ToList())
{
//keyvaluepair.Key
//keyvaluepair.Value
}
JObject class 有一个包含这些属性的内部字典。可以枚举它的实例,并且可以访问每个子对象。这是一个示例代码:
string input = "{ \"errors\": { \"title\": [\"can't be blank\"] }}";
JObject json = JObject.Parse(input);
foreach (var item in json)
{
Console.WriteLine($"{item.Key} _ {item.Value}");
}
JObject class 是在 Newtonsoft.Json 包中定义的,要从您的项目中引用它,您需要在 csproj 文件中添加以下包引用(或者自己做)使用 Nuget 包管理器):
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="10.0.3" />
</ItemGroup>
希望这会有所帮助!