Дезаминирование ответов 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)

Спасибо всем