【问题标题】:How to use Json.Net to deserialize json that starts with a property name of a number?如何使用 Json.Net 反序列化以数字的属性名称开头的 json?
【发布时间】:2017-01-16 07:10:54
【问题描述】:

我正在尝试从 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 对象属性?

【问题讨论】:

  • 据我从 JSON 验证中可以看出,这不是有效的 json。

标签: c# json json.net deserialization


【解决方案1】:

您的 json 是 parsebar(在我从您的“数据”中创建字符串之后):

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

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

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

您的第一个 kson 对象可以访问为:

result[8].First();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多