C# 序列化异常:结束元素';标题';从名称空间'';预期
我正在尝试反序列化json字符串,并从命名空间“”中获取错误C# 序列化异常:结束元素';标题';从名称空间'';预期,c#,json,deserialization,C#,Json,Deserialization,我正在尝试反序列化json字符串,并从命名空间“”中获取错误结束元素“caption”。从命名空间“”中找到元素“created\u time”。调用时 InstagramObject test = (InstagramObject) instagramObject.ReadObject(instagramWebResponse.GetResponseStream()); Instagram中的json返回许多元素,但我只需要少数元素。我的数据合同将发布在下面 基本上我需要{data:[{ca
结束元素“caption”。从命名空间“”中找到元素“created\u time”。
调用时
InstagramObject test = (InstagramObject) instagramObject.ReadObject(instagramWebResponse.GetResponseStream());
Instagram中的json返回许多元素,但我只需要少数元素。我的数据合同将发布在下面
基本上我需要{data:[{caption:string,link:string,image:{…}]}
下面是一个json的示例
{
"data": [{
"comments": {
"data": [],
"count": 0
},
"caption": {
"created_time": "1296710352",
"text": "Inside le truc #foodtruck",
"from": {
"username": "kevin",
"full_name": "Kevin Systrom",
"type": "user",
"id": "3"
},
"id": "26621408"
},
"likes": {
"count": 15,
"data": [{
"username": "mikeyk",
"full_name": "Mike Krieger",
"id": "4",
"profile_picture": "..."
}, {...subset of likers...}]
},
"link": "http://instagr.am/p/BWrVZ/",
"user": {
"username": "kevin",
"profile_picture": "http://distillery.s3.amazonaws.com/profiles/profile_3_75sq_1295574122.jpg",
"id": "3"
},
"created_time": "1296710327",
"images": {
"low_resolution": {
"url": "http://distillery.s3.amazonaws.com/media/2011/02/02/6ea7baea55774c5e81e7e3e1f6e791a7_6.jpg",
"width": 306,
"height": 306
},
"thumbnail": {
"url": "http://distillery.s3.amazonaws.com/media/2011/02/02/6ea7baea55774c5e81e7e3e1f6e791a7_5.jpg",
"width": 150,
"height": 150
},
"standard_resolution": {
"url": "http://distillery.s3.amazonaws.com/media/2011/02/02/6ea7baea55774c5e81e7e3e1f6e791a7_7.jpg",
"width": 612,
"height": 612
}
},
"type": "image",
"filter": "Earlybird",
"tags": ["foodtruck"],
"id": "22721881",
"location": {
"latitude": 37.778720183610183,
"longitude": -122.3962783813477,
"id": "520640",
"street_address": "",
"name": "Le Truc"
}
}]
}
这是我的数据合同
[DataContract]
public class InstagramObject {
[DataMember(Name = "data")]
public IEnumerable<InstagramData> instagramData { get; set; }
}
[DataContract]
public class InstagramData {
[DataMember(Name = "images")]
public List<InstagramImage> instagramImages { get; set; }
[DataMember(Name = "caption")]
public string caption { get; set; }
[DataMember(Name = "link")]
public string link { get; set; }
}
[DataContract]
public class InstagramImage {
[DataMember(Name = "low_resolution")]
public InstagramImageInfo lowResolutionImage { get; set; }
[DataMember(Name = "thumbnail")]
public InstagramImageInfo thumbnail { get; set; }
[DataMember(Name = "standard_resolution")]
public InstagramImageInfo standardResolution { get; set; }
}
[DataContract]
public class InstagramImageInfo {
[DataMember(Name = "url")]
public string url { get; set; }
[DataMember(Name = "width")]
public int width { get; set; }
[DataMember(Name = "height")]
public int height { get; set; }
}
[DataContract]
公共类InstagramObject{
[DataMember(Name=“data”)]
公共IEnumerable instagramData{get;set;}
}
[数据合同]
公共类InstagramData{
[DataMember(Name=“images”)]
公共列表instagramImages{get;set;}
[DataMember(Name=“caption”)]
公共字符串标题{get;set;}
[DataMember(Name=“link”)]
公共字符串链接{get;set;}
}
[数据合同]
公共类InstagramImage{
[DataMember(Name=“低分辨率”)]
公共InstagramImageInfo低分辨率图像{get;set;}
[DataMember(Name=“缩略图”)]
公共InstagramImageInfo缩略图{get;set;}
[DataMember(Name=“标准决议”)]
公共InstagramImageInfo标准解析{get;set;}
}
[数据合同]
公共类InstagramImageInfo{
[DataMember(Name=“url”)]
公共字符串url{get;set;}
[DataMember(Name=“width”)]
公共整数宽度{get;set;}
[DataMember(Name=“height”)]
公共整数高度{get;set;}
}
在数据契约中标题
被声明为字符串,但在JSON中标题
是一个具有各种字段的记录-标题
应声明为具有兼容结构的对象:
[DataContract]
public class InstagramCaption {
[DataMember(Name = "text")]
public string Text {get; set;}
}
. . .
[DataMember(Name = "caption")]
public InstagramCaption caption { get; set; }
. . .
如果您想使用+Linq,则无需声明这些类别
var obj = (JObject)JsonConvert.DeserializeObject(json);
var result = obj["data"]
.Select(x => new {
Caption = (string)x["caption"]["text"],
Link = (string)x["link"],
Images = x["images"].Children()
.Select(y=>(string)y.First()["url"]).ToArray()
})
.ToArray();