Как классы C# работают со знаками доллара в JSON?

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

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

3 ответа

Решение

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

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

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

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

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

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

Эти элементы со знаком доллара ($) обычно являются метаданными, а НЕ полями. Когда JSON.NET сериализует объект и вы указываете ему обрабатывать типы объектов, он вставит $ items, который обозначает метаданные для правильной десериализации в дальнейшем.

Если вы хотите обрабатывать $ 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 обрабатывать типы данных, полагаясь на $ для получения информации.

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

Другие вопросы по тегам