Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.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# 使用json反序列化嵌套json对象。Net返回null_C#_Json_Json.net - Fatal编程技术网

C# 使用json反序列化嵌套json对象。Net返回null

C# 使用json反序列化嵌套json对象。Net返回null,c#,json,json.net,C#,Json,Json.net,我从调用的API中获取以下嵌套Json对象 {"status":"success","data":{"valid_for":3600,"token":"access_token","expires":1123123123123}} PostResponse类如下所示 public class PostResponse { public string status { get; set; } public Data data { get; set; } } public cla

我从调用的API中获取以下嵌套Json对象

{"status":"success","data":{"valid_for":3600,"token":"access_token","expires":1123123123123}}
PostResponse类如下所示

public class PostResponse
{
    public string status { get; set; }
    public Data data { get; set; }
}

public class Data
{
    public int valid_for { get; set; }
    public string token { get; set; }
    public int expires { get; set; }
}
我用这段代码得到的postResponse为null

using (StreamReader reader = new StreamReader(resp.GetResponseStream()))
{
     Console.WriteLine(reader.ReadToEnd());
     postResponse = JsonConvert.DeserializeObject<PostResponse>(reader.ReadToEnd());
}
使用(StreamReader=newstreamreader(resp.GetResponseStream())
{
Console.WriteLine(reader.ReadToEnd());
postResponse=JsonConvert.DeserializeObject(reader.ReadToEnd());
}

您需要重置流指针位置,因为在使用
WriteLine
方法时,您已经从流中读取了数据

Stream stream = resp.GetResponseStream();
using (StreamReader reader = new StreamReader(stream))
{
    Console.WriteLine(reader.ReadToEnd());

    stream.Position = 0; //Reset position pointer
    reader.DiscardBufferedData();

    postResponse = JsonConvert.DeserializeObject<PostResponse>(reader.ReadToEnd());
}
Stream=resp.GetResponseStream();
使用(StreamReader=新StreamReader(stream))
{
Console.WriteLine(reader.ReadToEnd());
stream.Position=0;//重置位置指针
reader.discardeBufferedData();
postResponse=JsonConvert.DeserializeObject(reader.ReadToEnd());
}

从您的示例json:{“状态”:“成功”,“数据”:“有效的”:3600,“令牌”:“访问令牌”,“过期”:1123123123123123}}不是有效的json,您在“有效的”之前{当你做一个
ReadToEnd
时,你不需要再次将读取指针设置到流的开头,以便创建一个新的
ReadToEnd
,因为如果是这样,当你试图解析最后一个
ReadToEnd
时,会返回
@dcg得到它。这就是问题所在。谢谢。你错过了{就在“data”之后:将来可能会帮助你。祝你好运!