如何使用Json.Net反序列化以数字的属性名称开头的json?

时间:2017-01-16 07:10:55

标签: c# json json.net deserialization

我正在尝试从API端点反序列化一些JSON数据,并且数据包含在{8: myData}中。我无法弄清楚如何使用第一个属性命名反序列化它。

示例JSON:

{
8: 
  [
    data, 
    data2, 
    data3, 
    data4
  ]
}

我的反序列化行失败,因为JSON数据的第一个属性名是8

IEnumerable<ApiCombatOverallRank> result = JsonConvert.DeserializeObject<IEnumerable<ApiCombatOverallRank>>(resultsString);

我可以像这样创建一个匿名类型:

var anonType = new { data = new List<ApiCombatOverallRank>() };
IEnumerable<ApiCombatOverallRank> result = JsonConvert.DeserializeAnonymousType(resultsString, anonType).data;

但是,它不会反序列化,因为JSON中的属性名称为8而不是data。 C#将不允许我创建一个匿名对象,如:

var anonType = new { 8 = new List<ApiCombatOverallRank>() };

同样,我无法将注释添加到像这样的非对象:

var anonType = new {[JsonProperty(PropertyName = "8")] data = new List<ApiCombatOverallRank>() };

如何反序列化此JSON并超越8的第一个JSON对象属性?

1 个答案:

答案 0 :(得分:1)

你的json是parsebar(在我用#34;数据&#34;&#34;制作字符串之后):

var result = JsonConvert
     .DeserializeObject<Dictionary<int, IEnumerable<string>>>(resultsString);

所以我认为,你真正的json你可以解析为:

var result = JsonConvert
     .DeserializeObject<Dictionary<int, IEnumerable<ApiCombatOverallRank>>>(resultsString);

和你可以访问的第一个kson对象:

result[8].First();