Дезаминирование ответов JSON, содержащих атрибуты, конфликтующие с ключевыми словами
Существует API, который я не контролирую, но чей вывод мне нужно потреблять с помощью С#, предпочтительно используя JSON.Net.
Вот пример ответа:
[
{
"media_id": 36867,
"explicit": 0
}
]
Я планировал иметь такой класс:
class Media {
public int media_id;
public int explicit;
}
И для десериализации:
var l = JsonConvert.DeserializeObject<List<Media>>(s);
К сожалению, "явным" является ключевое слово С#, поэтому это невозможно скомпилировать.
Мое следующее предположение - изменить класс:
class Media {
public int media_id;
public int explicit_;
}
... и каким-то образом сопоставить атрибуты ответа с атрибутами С#.
Как мне это сделать, или я полностью не ошибаюсь?
В противном случае я был бы в порядке, чтобы просто игнорировать "явное" в ответе, если есть способ сделать это?
Ответы
Ответ 1
Не использовали JSON.Net, но, судя по документам здесь, я полагаю, вам просто нужно делать то, что вы сделали бы с XmlSerialization: Добавить атрибут, чтобы указать, как должно вызываться свойство JSON:
class Media {
[JsonProperty("media_id")]
public int MediaId;
[JsonProperty("explicit")]
public int Explicit;
}
Ответ 2
С# позволяет вам определять членов с зарезервированными именами слов (для случаев совместимости именно так), экранируя их с помощью @, например,
class Media {
public int media_id;
public int @explicit;
}
Не уверен, как это работает с JSON.Net, но я бы подумал, что он должен работать (поскольку @- это побег, а не часть имени поля).
Ответ 3
Следующий код работал у меня.
class JsonRpc {
public string id;
public string method;
public string[] @params;
}
JsonConvert.DeserializeObject<JsonRpc> (data)
Спасибо всем