C#类如何处理JSON中的美元符号?

时间:2011-01-09 09:54:10

标签: c# json json.net google-data-api

我从Google's data API获得了一个JSON提要,很多属性名称以$字符(美元符号)开头。

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

3 个答案:

答案 0 :(得分:21)

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

[JsonProperty(PropertyName = "$someName")]
public string SomeName { get; set; }

答案 1 :(得分:6)

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

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

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

[JsonProperty("$id")]
public string Id { get; set; }

答案 2 :(得分:2)

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

如果要将$项视为元数据,请使用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在依赖$ for信息的同时处理数据类型。

希望有所帮助..