Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 序列化异常:结束元素';标题';从名称空间'';预期_C#_Json_Deserialization - Fatal编程技术网

C# 序列化异常:结束元素';标题';从名称空间'';预期

C# 序列化异常:结束元素';标题';从名称空间'';预期,c#,json,deserialization,C#,Json,Deserialization,我正在尝试反序列化json字符串,并从命名空间“”中获取错误结束元素“caption”。从命名空间“”中找到元素“created\u time”。调用时 InstagramObject test = (InstagramObject) instagramObject.ReadObject(instagramWebResponse.GetResponseStream()); Instagram中的json返回许多元素,但我只需要少数元素。我的数据合同将发布在下面 基本上我需要{data:[{ca

我正在尝试反序列化json字符串,并从命名空间“”中获取错误
结束元素“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();