C# 使用NewtonSoft将JSON反序列化为.net不同对象

C# 使用NewtonSoft将JSON反序列化为.net不同对象,c#,json,deserialization,C#,Json,Deserialization,首先,我知道这个问题已经被问了几百次,但我不知道我的问题是什么 我正在尝试使用NewtonSoft将json字符串反序列化为自定义对象 var client = new RestClient(URL); var request = new RestRequest(Method.POST); request.RequestFormat = DataFormat.Json; request.AddJsonBody(retEmployeeFilters)

首先,我知道这个问题已经被问了几百次,但我不知道我的问题是什么

我正在尝试使用NewtonSoft将json字符串反序列化为自定义对象

var client = new RestClient(URL);
        var request = new RestRequest(Method.POST);
        request.RequestFormat = DataFormat.Json;
        request.AddJsonBody(retEmployeeFilters);
        var response = client.Execute(request);
        //Console.WriteLine(response.Content);
        return JsonConvert.DeserializeObject<RetrieveEmployeeResponse>(response.Content);
这是RetrieveEmployeeResponse类

class RetrieveEmployeeResponse 

{
    public List<Employee> response { get; set; }
    public String success { get; set; }
}
我做的一切都好吗

通过调试返回到这里的对象

return JsonConvert.DeserializeObject<RetrieveEmployeeResponse>(response.Content);
返回JsonConvert.DeserializeObject(response.Content);
具有response=null和success=null


有什么帮助吗?

您应该将接收到的json响应反序列化为

  string responseJson="{\"response\":[{\"id\":3,\"name\":\"A\",\"email\":\"sansdad32a.@ds.com\",\"mobile_number\":\"41\",\"address\":\"B\",\"age\":20,\"role\":\"N\",\"hiring_date\":\"2053-04-03\",\"created_at\":\"2016-03-16 23:49:15\",\"updated_at\":\"2016-03-16 23:49:15\"},{\"id\":4,\"name\":\"B\",\"email\":\"sansda32d32a.@ds.com\",\"mobile_number\":\"41321\",\"address\":\"Q\",\"age\":20,\"role\":\"C\",\"hiring_date\":\"2053-04-03\",\"created_at\":\"2016-03-16 23:49:24\",\"updated_at\":\"2016-03-16 23:49:24\"}]}\r\n";

  return JsonConvert.DeserializeObject<RetrieveEmployeeResponse>(responseJson);
目前,该国的一个“A”以及一个“电子邮件”如下:“::\“A”以及“电子邮件”如下:\“桑达达32A.@ds.com.com\”,“移动电话号码”以及“移动电话号码”的一个。“移动电话号码”的一个号码:“,“移动电话号码”的一个号码:,“移动电话号码号码”的一个号码:“:“手机号码”的号码号码号码::“41\,,“手机号码”手机号码”号码:“:::“41\,,,“手机号码”手机号码,”手机号码号码:::“41\“41\,,,,,“41,”手机号码,”手机号码号码:,,,,,,,“手机号码,”手机号码号码:,,,,,“41,”手机号码:,,“41,”手机号码:,,,,,,,,,,“41,”手机号码,”手机号码:,,,,,,,,,,,,“手机号码,”手机号码,”手机号码号码\“,\“email\”:\“sansda32d32a@ds.com\”,\”手机号码“:”41321“,”地址“:”Q“,”年龄“:”20,“角色“:”C“,”招聘日期“:”2053-04-03“,”创建地址“:”2016-03-16 23:49:24“,”更新地址“:”2016-03-16 23:49:24”}\r\n”; 返回JsonConvert.DeserializeObject(responseJson);
您的json没有任何成功字符串,这就是为什么它在反序列化后为空。

根据评论中的讨论,下面的代码修复了该问题,但原始问题是什么仍然不清楚。如果答案变得清晰,我会更新这个答案

更改行
返回JsonConvert.DeserializeObject(response.Content)解决了返回对象中的null属性问题

var tempStr = response.Content;
var temp = JsonConvert.DeserializeObject<RetrieveEmployeeResponse>(tempStr);
return temp;
var tempStr=response.Content;
var temp=JsonConvert.DeserializeObject(tempStr);
返回温度;

您正在检查什么
响应
以及在哪里设置
成功
,因为它不是JSON字符串的一部分?测试您的代码一个对象填充了JSON的值,除了ofc for
success
您确定内容不是空的吗?我做了一个快速测试,同样的代码也适用于我。@BerndLinde感谢您的回复,json字符串已经有响应(员工列表),但没有成功字符串。但是,为什么响应属性等于null,即使json字符串中有它的数据,它也会被忽略呢deserialized@bit谢谢你的回复,我当然确定,因为我是从输出中复制的。我现在很困惑:)你是想在线上调试它还是在执行该行之后调试它?如果它在后面,那么它可能已经被释放了,因为这是(假定的)方法的最后一行,所有对象都可以被GC调用。实际的问题是什么?我不明白,你的回答是什么?我同意success应该为null,因为json字符串中没有它的数据,但是关于响应(员工列表),我的意思是你应该反序列化json字符串。对于员工名单,您应该仔细检查名称,因为如果json字符串中的对象名称与类属性不匹配,反序列化将返回null。它们是匹配的,因为我尝试手动实现它们,也尝试通过json字符串中自动生成的模型来实现。请尝试执行在我的答案中编写的代码,并让我知道答案结果。当我尝试它时,它起作用了。你能再次确认你得到了正确的json响应吗?奇怪!!工作很有魅力:)
  string responseJson="{\"response\":[{\"id\":3,\"name\":\"A\",\"email\":\"sansdad32a.@ds.com\",\"mobile_number\":\"41\",\"address\":\"B\",\"age\":20,\"role\":\"N\",\"hiring_date\":\"2053-04-03\",\"created_at\":\"2016-03-16 23:49:15\",\"updated_at\":\"2016-03-16 23:49:15\"},{\"id\":4,\"name\":\"B\",\"email\":\"sansda32d32a.@ds.com\",\"mobile_number\":\"41321\",\"address\":\"Q\",\"age\":20,\"role\":\"C\",\"hiring_date\":\"2053-04-03\",\"created_at\":\"2016-03-16 23:49:24\",\"updated_at\":\"2016-03-16 23:49:24\"}]}\r\n";

  return JsonConvert.DeserializeObject<RetrieveEmployeeResponse>(responseJson);
var tempStr = response.Content;
var temp = JsonConvert.DeserializeObject<RetrieveEmployeeResponse>(tempStr);
return temp;