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

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