带有奇怪名称字段的Json无法解析

时间:2014-03-21 13:06:02

标签: c# .net json

我有一个JSON容器,它有一个名为“48x48”的奇怪字段,用于photoUrl。

using Newtonsoft.Json;
(...)
dynamic issuesJson = JsonConvert.DeserializeObject(responseIssues.Content);
foreach (dynamic issue in issuesJson.issues){
      Console.WriteLine(issue.name); //works properly
      Console.WriteLine(issue.48x48); //error -> expected;
}

由于某种原因,Visual Studio不接受对此动态对象的此运行时字段的访问。我该如何解决这个问题? 注意:我无法更改字段名称。

非常感谢。

3 个答案:

答案 0 :(得分:3)

  

由于某些原因,Visual Studio不接受对此动态对象的此运行时字段的访问。

您提供的内容根本就不是C#。标识符不能以数字开头。即使您正在尝试解析dynamic的成员,该问题仍然有效。

我们不知道您为issues使用的类型,但基本上您需要将其作为键/值映射处理,您可以通过字符串访问它。你如何做到这一点将取决于issue的实施。看起来Json.NET不保证任何东西 - 你可能能够将它投射到JObject,例如:

foreach (JObject issue in issuesJson.issues) {
    Console.WriteLine(issue["48x48"]);
}

答案 1 :(得分:0)

字段名称不能以数字开头。对不起,没办法了。

您必须查阅解串器的文档,了解它如何处理此类案例。 可能就像重命名字段一样简单" _48x48"。

答案 2 :(得分:0)

编辑:实际上,根据您的代码,您可能没有表示此JSON对象的类;无论如何我都会留下我的答案,以防它帮助别人。


正如其他人所提到的,C#标识符不能以数字开头。您只需要将48x48重命名为类中的有效名称,并使用[JsonProperty]属性将其映射到实际的JSON名称:

[JsonProperty("48x48")]
public string _48x48 { get; set; }