我试图反序列化一个没有包含括号的数组的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...
}
如何对此进行反序列化?
答案 0 :(得分:1)
更新根对象以使用IDictionary<string, Info>
public class RootObject {
public string Id { get; set; }
public IDictionary<string, Info> MoreInfo { get; set; }
}
动态键将是词典中的键。
解析后,您可以通过字典的键访问信息
Info info = rootObject.MoreInfo["info193802"];
答案 1 :(得分:0)
Newtonsoft可以正确解析数据。数据代表对象,它们恰好嵌套得相当深。您可以通过几种方式完成它,例如:
dynamic json = JsonConvert.DeserializeObject(response);
var info = json["moreinfo:info913802:example"].Value;
您的另一个选择是使用Visual Studio,让它创建一个可以反序列化的对象。
输出将是:
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" }
}
}