Я работаю над приложением, которое обращается к TMDb. Я использую класс DataContractJsonSerializer для чтения данных, возвращаемых API TMDb.Чтение JSON с использованием DataContractJsonSerializer
Существует один метод API, который возвращает JSON, который может выглядеть как:
{"id":550,"favorite":false,"rated":false,"watchlist":false}
или как:
{"id":49521,"favorite":false,"rated":{"value":5.5},"watchlist":false}
Как вы можете видеть, номинальное поле в первом формате JSON является булевым, а во втором - нет.
Есть ли хороший способ справиться с этими JSON?
Спасибо за любую помощь
Edit: Считывание JSON:
[DataContract]
public class JsonModelBase<T> where T : class, new()
{
public T DesterilizeJson(String jsonContent)
{
var bytes = Encoding.UTF8.GetBytes(jsonContent);
using (var stream = new MemoryStream(bytes))
return DesterilizeJson(stream);
}
public T DesterilizeJson(Stream jsonStream)
{
var serializer = new DataContractJsonSerializer(typeof(T));
return (T)serializer.ReadObject(jsonStream);
}
}
[DataContract]
public class TmdbMovieAccountStates : JsonModelBase<TmdbMovieAccountStates>
{
[DataMember(Name = "id")]
public Int32 Id { get; set; }
[DataMember(Name = "favorite")]
public Boolean Favorite { get; set; }
[DataMember(Name = "rated")]
public Boolean Rated { get; set; }
[DataMember(Name = "watchlist")]
public Boolean Watchlist { get; set; }
}
образца (если вы хотите попробовать что-то)
var json = "{\"id\":49521,\"favorite\":false,\"rated\":{\"value\":5.5},\"watchlist\":false}";
var bytes = Encoding.UTF8.GetBytes(json);
using (var stream = new MemoryStream(bytes))
{
var serializer = new DataContractJsonSerializer(typeof(TmdbMovieAccountStates));
var data = (TmdbMovieAccountStates)serializer.ReadObject(stream);
}
Вы можете попробовать использовать C# динамический тип. Я не стану считать это ответом, потому что я понятия не имею, будет ли это работать. –
Можете ли вы показать свой код, в котором вы задали значение рейтинга? – Stokedout
Добавлен код в вопрос. – musium