Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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

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

Ответ 3

Эти элементы со знаком доллара ($) обычно означают метаданные и поля NOT. Когда 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)

ТипNameHandling = Newtonsoft.Json.TypeNameHandling.All сообщает JSON обрабатывать типы данных, полагаясь на информацию $для информации.

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