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