Как классы C# справляются со знаками доллара в JSON?
Я получаю канал JSON от API данных Google и многие имена свойств начинаются с символа $ (знак доллара).
моя проблема в том, что я не могу создать класс C# с именем переменной, начинающимся со знака доллара, это не разрешено языком. Я использую JSON.NET от Newtonsoft для преобразования JSON в объекты C#. Как я могу обойти эту проблему?
3 ответов
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.Все говорит JSON обрабатывать типы данных в то время как полагаясь на $ для информации.
надеюсь, что это поможет..