{
"578080": {
"success": true,
"data": {
"type": "game",
"name": "PLAYERUNKNOWN'S BATTLEGROUNDS",
"steam_appid": 578080,
"required_age": 0,
"is_free": false,
}
}
}
这是来自Steam API。正如您可以看到ID本身的根密钥,因此我不知道如何将其反序列化为对象。我已经看到了有关未知属性名称的其他问题,但似乎无法在根名称未知时应用这些解决方案。
答案 0 :(得分:2)
执行此操作的一种方法是反序列化到Dictionary
<强>类强>
public class Data
{
public string type { get; set; }
public string name { get; set; }
public int steam_appid { get; set; }
public int required_age { get; set; }
public bool is_free { get; set; }
}
public class SomeClass
{
public bool success { get; set; }
public Data data { get; set; }
}
<强>用法强>
var result = JsonConvert.DeserializeObject<Dictionary<string, SomeClass>>(json);
答案 1 :(得分:1)
如果您不关心为反序列化数据制作POCO模型,并且只想使用dynamic
获取某些属性,则可以使用JsonExtensionData
获取JToken
相关子对象:
public class Foo
{
[JsonExtensionData]
public Dictionary<string, JToken> ExtensionData {get; set;}
}
dynamic obj = JsonConvert.DeserializeObject<Foo>(json).ExtensionData.Single().Value;
Console.WriteLine(obj.success);
Console.WriteLine(obj.data.name);
如果您可以在几种不同类型的响应中重用Foo
,则此方法特别有用,因为它根本不关心对象模式。
答案 2 :(得分:1)
您可以使用匿名类型反序列化来解析这样的JSON数据,而无需创建类。我假设您的数据中只有一个Id(“578080”)。如果存在更多Id,您可以为这些Id创建一个数组。希望它有效。
var finalResult=JsonConvert.DeserializeAnonymousType(
yourdata, // input
new
{
Id=
{
new
{
success="", data=""
}
}
}
);
console.write(finalResult.Id);// getting Id 578080
console.write(finalResult.Id.success);
console.write(finalResult.Id.data.type);