使用未知的 RootObject 密钥反序列化 JSON.NET
Derserialize JSON.NET With Unknown RootObject Key
{
"578080": {
"success": true,
"data": {
"type": "game",
"name": "PLAYERUNKNOWN'S BATTLEGROUNDS",
"steam_appid": 578080,
"required_age": 0,
"is_free": false,
}
}
}
这是来自 Steam API。如您所见,根键是 ID 本身,所以我不知道如何将其反序列化为对象。我看过其他关于未知 属性 名称的问题,但似乎无法在根名称未知时应用这些解决方案。
一种方法是反序列化到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);
如果您不关心为反序列化数据制作 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
,这种方法将特别有用,因为它根本不关心对象架构。
您可以像这样使用匿名类型反序列化来解析 JSON 数据,而无需创建 类。我假设您的 data.If 更多 ID 中只有一个 Id("578080"),您可以为这些 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);
{
"578080": {
"success": true,
"data": {
"type": "game",
"name": "PLAYERUNKNOWN'S BATTLEGROUNDS",
"steam_appid": 578080,
"required_age": 0,
"is_free": false,
}
}
}
这是来自 Steam API。如您所见,根键是 ID 本身,所以我不知道如何将其反序列化为对象。我看过其他关于未知 属性 名称的问题,但似乎无法在根名称未知时应用这些解决方案。
一种方法是反序列化到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);
如果您不关心为反序列化数据制作 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
,这种方法将特别有用,因为它根本不关心对象架构。
您可以像这样使用匿名类型反序列化来解析 JSON 数据,而无需创建 类。我假设您的 data.If 更多 ID 中只有一个 Id("578080"),您可以为这些 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);