我正在尝试对一个带有没有包含括号的数组的JSON字符串。
{ "id": "983f90j30909j3f",
"moreInfo": {
"info193802": { ... },
"info920938": { ... },
"info849028": { ... }
}
}
这个" moreinfo"是带有动态钥匙的一系列项目,没有方括号告诉它是一个数组。
我试图用newtonsoft.json正常(JsonConvert.DeserializeObject<rootObject>()
)对其进行审理,但是由于此JSON数组并不是真正的数组,因此会引发错误。这是我的班级:
public class RootObject
{
public string Id { get; set; }
public MoreInfo MoreInfo { get; set; }
}
public class MoreInfo
{
public List<Info> InfoList{ get; set; }
}
public class Info
{
properties...
}
我该如何进行审理?
更新根对象以使用IDictionary<string, Info>
public class RootObject {
public string Id { get; set; }
public IDictionary<string, Info> MoreInfo { get; set; }
}
动态键将是字典中的键。
一旦解析,您可以通过字典的键访问信息
Info info = rootObject.MoreInfo["info193802"];
newtonsoft可以正确解析数据。数据代表对象,它们恰好是相当深的。您可以完成几种方法,例如:
dynamic json = JsonConvert.DeserializeObject(response);
var info = json["moreinfo:info913802:example"].Value;
您的另一个选项是使用Visual Studio,让其创建一个可以验证的对象。
- 编辑
- 粘贴特殊
- 作为JSON
输出将是:
public class Rootobject
{
public string id { get; set; }
public Moreinfo moreInfo { get; set; }
}
public class Moreinfo
{
public Info193802 info193802 { get; set; }
public Info920938 info920938 { get; set; }
public Info849028 info849028 { get; set; }
}
public class Info193802
{
public string Example { get; set; }
}
public class Info920938
{
public string Example { get; set; }
}
public class Info849028
{
public string Example { get; set; }
}
我使用的源json是您的,一个例外:
{ "id": "983f90j30909j3f",
"moreInfo": {
"info193802": { "Example" : "Blah" },
"info920938": { "Example" : "Blah" },
"info849028": {"Example" : "Blah" }
}
}