【发布时间】:2015-06-23 02:43:49
【问题描述】:
我有以下使用 NewtonSoft JSon 解析的 JSon:
{
"page" : 0,
"listings" : [
{
"data" : { "name" : "Name 1", "id" : "id1" },
"media" : {
"images" : [
{ "title" : "image1", "url" : "http://www.d.com/image1" },
{ "title" : "image2", "url" : "http://www.d.com/image3" },
]
}
},
{
"data" : { "name" : "Name 2", "id" : "id2" },
"media" : {
"images" : [
{ "title" : "image3", "url" : "http://www.d.com/image3" },
{ "title" : "image4", "url" : "http://www.d.com/image4" },
]
}
},
}
C#对象如下:
public class Result {
[JsonProperty("page")]
public Int32 Page { get; set; }
[JsonProperty("listings")]
public List<Listing> Listings { get; set; }
} // PropertyResult
public class Listing {
[JsonProperty("data")]
public ListingData Data { get; set; }
[JsonProperty("media")]
public ListingMedia Media{ get; set; }
}
public class ListingData {
[JsonProperty("id")]
public Int32 Id { get; set; }
[JsonProperty("name")]
public String Name { get; set; }
}
public class ListingMedia {
[JsonProperty("images")]
public IList<ListingMediaImage> Images { get; set; }
}
public class ListingMediaImage {
[JsonProperty("title")]
public String Title { get; set; }
[JsonProperty("url")]
public String Url { get; set; }
}
我能够解析 ResultPage 但不能解析列表。
然后我尝试了一个转换器:
public class ResultConverter : JsonConverter {
public override bool CanConvert(Type objectType) {
return (objectType == typeof(Result));
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) {
JObject jo = JObject.Load(reader);
Result result = jo.ToObject<Result>();
result.Listings.Data = jo.SelectToken("listings.data").ToObject<ResultData>();
result.Listings.Images = jo.SelectToken("listings.media").ToObject<ResultMedia>();
return result;
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) {
throw new NotImplementedException();
}
}
这不起作用。 有谁知道我应该如何创建转换器?
【问题讨论】:
-
@Cᴏʀʏ
JsonProperty应该没问题。 @Miguel你如何反序列化它?列表属性null中的实际结果是什么? -
使用普通的反序列化对象并传递转换器
-
尝试使用JsonConvert.Deserialize
进行反序列化。