Как классы C # работают со знаками доллара в JSON? - PullRequest
13 голосов
/ 09 января 2011

Я получаю фид JSON от API данных Google , и многие имена свойств начинаются с символа $ (знак доллара).

Моя проблема в том, что я могу 't создать класс C # с именем переменной, начинающимся со знака доллара, это не разрешено языком.Я использую JSON.NET от Newtonsoft для преобразования объектов JSON в C #.Как я могу обойти эту проблему?

Ответы [ 3 ]

21 голосов
/ 09 января 2011

Вы можете попробовать использовать атрибут [JsonProperty], чтобы указать имя:

[JsonProperty(PropertyName = "$someName")]
public string SomeName { get; set; }
6 голосов
/ 09 сентября 2015

firas489 был на правильном пути, что $ указывает метаданные, а не фактическое поле данных. Однако исправление на самом деле заключается в следующем:

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

Установите обработку метаданных, чтобы игнорировать, и затем вы можете сериализовать / десериализовать свойство, используя атрибут PropertyName:

[JsonProperty("$id")]
public string Id { get; set; }
2 голосов
/ 19 ноября 2014

Эти элементы со знаком доллара ($) обычно являются метаданными, а НЕ полями. Когда 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 обрабатывать типы данных, полагаясь на $ для получения информации.

Надеюсь, это поможет ..

...