C# 使用json反序列化嵌套json对象。Net返回null
我从调用的API中获取以下嵌套Json对象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
{"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”之后:将来可能会帮助你。祝你好运!