我正在开发一个访问 TMDb 的应用程序。我使用 DataContractJsonSerializer 类来读取 TMDb API 返回的数据。
API 的一种方法返回 JSON,如下所示:
{"id":550,"favorite":false,"rated":false,"watchlist":false}
或喜欢:
{"id":49521,"favorite":false,"rated":{"value":5.5},"watchlist":false}
如您所见,第一个 JSON 中的额定字段是布尔值,而第二个不是。
有没有处理这种 JSON 的好方法?
谢谢你的帮助
编辑: 阅读 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);
}