【发布时间】:2019-07-18 05:38:06
【问题描述】:
您好,我在反序列化 IRestResponse.Content JSON 响应时遇到问题。
{
"49":
{
"9345": "2018-10-11",
"106": null,
"107": "4222238842",
"108": "CompanyName",
"8210": "2018-11-11/1",
"110": "00-300",
"109": "Street",
"112": "Country",
"18418": null,
"18420": "S\u0141ON",
"18422": "OtherString",
"9338": null,
"111": "City"
}
}
我尝试了一些网页或内置 VisualStudio 转换器,但它给了我这样的东西。
public class Rootobject
{
public _49 _49 { get; set; }
}
public class _49
{
public string _9345 { get; set; }
public object _106 { get; set; }
public string _107 { get; set; }
public string _108 { get; set; }
public string _8210 { get; set; }
public string _110 { get; set; }
public string _109 { get; set; }
public string _112 { get; set; }
public object _18418 { get; set; }
public string _18420 { get; set; }
public string _18422 { get; set; }
public object _9338 { get; set; }
public string _111 { get; set; }
}
这看起来没问题,但在我的情况下,这些 JSON 文件具有动态属性名称,并且可以具有另一个“int”值。 “49”内的嵌套内容也可以有更少或更多的值。 我对收集“49”
我也尝试过类似的方法,但也不起作用:
public class DeserializeJsonContent
{
public Dictionary<object, Dictionary<object, object>> values { get; set; }
}
简化代码示例
public List<T> JSONDeserialize<T>(IRestResponse response) where T : new()
{
var responseData = client.Deserialize<List<T>>(response);
var ListDeserializedData = responseData.Data.ToList<T>();
return ListDeserializedData;
}
....
var response = rest.client.Execute(request);
if (response.IsSuccessful)
{
var obj = rest.JSONDeserialize<DeserializeJsonContent>(response);
}
obj 计数为 1 但 vals = null
求解后编辑: 我仍然不知道为什么我的反序列化类在这种情况下不起作用(我在许多其他 json 反序列化响应中使用它) 感谢 xdtTransform 的回答,我已经尝试过并且所有这些都有效
var obj2 = JsonConvert.DeserializeObject<Dictionary<string, Dictionary<object, object>>>(response.Content);
var obj3 = JsonConvert.DeserializeObject<Dictionary<string, Dictionary<string, string>>>(response.Content);
var obj4 = JsonConvert.DeserializeObject<Dictionary<int, Dictionary<string, string>>>(response.Content);
var obj5 = JsonConvert.DeserializeObject<Dictionary<object, Dictionary<string, string>>>(response.Content);
var obj6 = JsonConvert.DeserializeObject<Dictionary<object, Dictionary<object, object>>>(response.Content);
var obj7 = JsonConvert.DeserializeObject<Dictionary<object, Dictionary<int, object>>>(response.Content);
那么就
var value = obj2.First().Key;
【问题讨论】:
-
字典方法是正确的。你实际上是如何使用它的?
-
如果你能分享minimal reproducible example 的
Dictionary方法,那就太棒了。 -
@cricket_007 我将嵌套字典更改为字符串,对象但仍然不起作用,还添加了一些代码示例
-
您不需要单独的课程。仅用字典替换 DeserializeJsonContent