18

我从Google 的数据 API获取 JSON 提要,许多属性名称以 $ 字符(美元符号)开头。

我的问题是我不能创建一个变量名以美元符号开头的 C# 类,这是语言不允许的。我正在使用Newtonsoft 的 JSON.NET将 JSON 转换为 C# 对象。我怎样才能解决这个问题?

4

3 回答 3

29

您可以尝试使用该[JsonProperty]属性来指定名称:

[JsonProperty(PropertyName = "$someName")]
public string SomeName { get; set; }
于 2011-01-09T10:02:03.317 回答
12

firas489 在正确的轨道上 $ 表示元数据,而不是实际的数据字段。然而,修复实际上是这样做的:

JsonSerializerSettings settings = new JsonSerializerSettings();
settings.MetadataPropertyHandling = MetadataPropertyHandling.Ignore;            

将元数据处理设置为忽略,然后您可以使用 PropertyName 属性序列化/反序列化属性:

[JsonProperty("$id")]
public string Id { get; set; }
于 2015-09-09T15:40:44.013 回答
3

那些带有美元符号 ($) 的项目通常是元数据而不是字段。当 JSON.NET 序列化一个对象并告诉它处理对象类型时,它将插入表示元数据的 $ 项,以便稍后正确反序列化。

如果要将 $ 项视为元数据,请使用 JsonSerializerSettings。例如:

Dim jsonSettings As New Newtonsoft.Json.JsonSerializerSettings With {.TypeNameHandling = Newtonsoft.Json.TypeNameHandling.All}
Dim jsonOut As String = Newtonsoft.Json.JsonConvert.SerializeObject(objects, jsonSettings)

TypeNameHandling = Newtonsoft.Json.TypeNameHandling.All 告诉 JSON 处理数据类型,同时依靠 $ 获取信息。

希望有帮助..

于 2014-11-19T15:46:29.367 回答