【发布时间】:2017-12-04 07:52:44
【问题描述】:
我正在尝试反序列化包含图片网址的事件数据。
当事件包含单张图片时,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; }
}
如果我如下定义我的 Images 类,它适用于数组:
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(它们代表他们应该做的),但这是一个糟糕的实现吗?
或者我是否在我的模型/反序列化中遗漏了一些应该允许我反序列化单个对象和数组的东西?
谢谢。
更新 反序列化代码:
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;
【问题讨论】:
-
请同时发布您的序列化/反序列化代码。希望它能帮助我们了解您的问题。
标签: c# json asp.net-mvc .net-core