我试图反序列化包含图像URL的事件数据。反序列化包含单个或数组对象的JSON
当事件包括单个图像,JSON字符串的格式是:
"images": {
"image": {
"small": {...},
"width": "48",
"creator": null,
"thumb": {...},
"height": "48",
"url": "http://example.com/image1.jpeg",
"medium": {...},
"id": "1"
}
}
当多个图像可用,的响应变化的格式:
"images": {
"image": [
{
"small": {...},
"width": "48",
"creator": null,
"thumb": {...},
"height": "48",
"url": "http://example.com/image1.jpeg",
"medium": {...},
"id": "1"
},
{
"small": {...},
"width": "48",
"creator": null,
"thumb": {...},
"height": "48",
"url": "http://example.com/image2.jpeg",
"medium": {...},
"id": "2"
}
]
}
当我试图反序列化,我可以让一个或其他模型工作,但不能同时工作。
我的模型是一样的东西:
public class Event
{
public string id { get; set; }
public string imageId { get; set; }
public Image image { get; set; }
public Images images { get; set; }
}
public class Image
{
public string id { get; set; }
public string width { get; set; }
public string caption { get; set; }
public string url { get; set; }
public string height { get; set; }
public int smallId { get; set; }
public Small small { get; set; }
public int mediumId { get; set; }
public Medium medium { get; set; }
public int thumbId { get; set; }
public Thumb thumb { get; set; }
}
如果我定义我的图片类,如下所示,其工作原理与数组:
public class Images
{
public string id { get; set; }
public List<Image> image { get; set; }
}
如果我把它定义如下,其工作原理与单个图像:
public class Images
{
public string id { get; set; }
public Image image { get; set; }
}
理论上,我可以在Images类中同时包含List和Image,但我不能使用如果我更改任一名称,则两者的名称和反序列化都不起作用。
我知道这两个响应都是有效的JSON(它们表示它们应该是什么),但这是一个糟糕的实现吗?
或者我错过了我的模型/反序列化中应该允许我反序列化单个对象和数组的东西?
谢谢。
UPDATE 反序列化代码:
var feedUrl = url;
var client = new HttpClient();
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
var serializer = new DataContractJsonSerializer(typeof(EventDetail));
var streamTask = client.GetStreamAsync(feedUrl);
EventDetail eventDetail = serializer.ReadObject(await streamTask) as EventDetail;
return eventDetail;
请发布您的序列化/反序列化代码以及。愿它能帮助我们理解你的问题。 –