Ответ 1
Вы можете попробовать использовать атрибут [JsonProperty]
, чтобы указать имя:
[JsonProperty(PropertyName = "$someName")]
public string SomeName { get; set; }
Я получаю канал JSON из API данных Google, и многие имена свойств начинаются с символа $(знак доллара).
Моя проблема в том, что я не могу создать класс С# с именем переменной, начинающимся со знака доллара, который не разрешен языком. Я использую JSON.NET из Newtonsoft для преобразования объектов JSON в С#. Как я могу обойти эту проблему?
Вы можете попробовать использовать атрибут [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; }
Эти элементы со знаком доллара ($) обычно означают метаданные и поля 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 обрабатывать типы данных, полагаясь на информацию $для информации.
Надеюсь, что это поможет.