C# JSON.NET不会突然转换

C# JSON.NET不会突然转换,c#,rest,json.net,restsharp,C#,Rest,Json.net,Restsharp,我正在编写一些代码,使用RestSharp和JSON.net库从API收集数据。直到最近,当我的模型开始返回空值(我的知识没有任何变化)时,这才很有效。查询的内容包含信息,因此该对象不应为空对象。结果显示为空 下面是我如何进行转换的一个片段示例: IRestResponse summaryResponse = summaryClient.Execute(summaryRequest); RootobjectSummary result = JsonConvert.Deseria

我正在编写一些代码,使用RestSharp和JSON.net库从API收集数据。直到最近,当我的模型开始返回空值(我的知识没有任何变化)时,这才很有效。查询的内容包含信息,因此该对象不应为空对象。结果显示为空

下面是我如何进行转换的一个片段示例:

 IRestResponse summaryResponse = summaryClient.Execute(summaryRequest);
        RootobjectSummary result = JsonConvert.DeserializeObject<RootobjectSummary>(summaryResponse.Content);
        return result;
最后,这是我得到的应该转换的JSON响应:

"{\"insurance_summary\":{\"insured_tenants_count\":7,\"new_policies_count\":7,\"cancelled_policies_count\":0,\"percentage_of_tenants_insured\":13.20754716981132,\"coverage_total\":130000.0,\"payment_total\":0.0,\"refund_total\":0.0,\"net_payment_amount\":0.0,\"start_date\":\"2018-07-03\",\"end_date\":\"2018-07-03\",\"facility_policy_number\":\"ABC12345\",\"master_policy_number\":\"CBA54321\"},\"meta\":{\"status_code\":200,\"status_message\":\"OK\",\"status_cat\":\"https://http.cat/200\",\"request_method\":\"GET\",\"request_id\":\"5a598888-eab3-4fab-9474-8856418f506b\",\"parameters\":{\"CreatedAfter\":\"2017-01-01-01T00:00:00-07:00\",\"CreatedBefore\":\"2018-07-01T00:00:00-07:00\",\"oauth_consumer_key\":\"GVelfUpJTn2NqGNf1bwJTbVTl5MDdHp3uTXyDaCd\",\"oauth_nonce\":\"9072365\",\"oauth_signature_method\":\"PLAINTEXT\",\"oauth_timestamp\":\"1530632568\",\"oauth_version\":\"1.0\",\"oauth_signature\":\"TRDNYFta6z8zNwE5lFCErnShnYLEvsFebz0wPRdy\\u0026\",\"facility_id\":\"b2af724f-3af4-4d62-94e4-88211763d18e\"}}}"

您必须配置反序列化程序才能使用snake案例命名:

DefaultContractResolver contractResolver = new DefaultContractResolver
{
    NamingStrategy = new SnakeCaseNamingStrategy()
};
RootobjectSummary result = JsonConvert.DeserializeObject<RootobjectSummary>(summaryResponse.Content, new JsonSerializerSettings
{
    ContractResolver = contractResolver
});
DefaultContractResolver contractResolver=新的DefaultContractResolver
{
NamingStrategy=新的蛇案例NamingStrategy()
};
RootobjectSummary结果=JsonConvert.DeserializeObject(summaryResponse.Content,新的JsonSerializerSettings
{
ContractResolver=ContractResolver
});

您必须配置反序列化程序才能使用snake案例命名:

DefaultContractResolver contractResolver = new DefaultContractResolver
{
    NamingStrategy = new SnakeCaseNamingStrategy()
};
RootobjectSummary result = JsonConvert.DeserializeObject<RootobjectSummary>(summaryResponse.Content, new JsonSerializerSettings
{
    ContractResolver = contractResolver
});
DefaultContractResolver contractResolver=新的DefaultContractResolver
{
NamingStrategy=新的蛇案例NamingStrategy()
};
RootobjectSummary结果=JsonConvert.DeserializeObject(summaryResponse.Content,新的JsonSerializerSettings
{
ContractResolver=ContractResolver
});

默认情况下,JSON.net是否自动在
受保租户数
受保租户数
之间转换,或者是否需要指定其他选项?也许你在某个时候无意中删除了这个选项?@JamesThorpe你知道,几个月前我自己也不确定,我不记得改变了json发送的模型,但它可能是由resharper自动完成的。我需要去检查一下,我甚至没有想到。如果您选择“修复文件/项目/解决方案中的命名”,Resharper绝对会建议将带下划线的名称更改为驼峰大小写的名称JSON.net是否会在默认情况下自动在
受保租户计数
受保租户计数
之间进行转换,还是需要指定其他选项?也许你在某个时候无意中删除了这个选项?@JamesThorpe你知道,几个月前我自己也不确定,我不记得改变了json发送的模型,但它可能是由resharper自动完成的。我需要去检查一下,我甚至没有想到。Resharper绝对会建议将带下划线的名称改为驼峰大小写的名称,如果你选择“在文件/项目/解决方案中修复命名”,它会在任何地方都这样做。太棒了,这与James Thorpe在评论中所说的联系在一起。在清理代码时,我没有意识到我的名字被resharper更改了。我需要试试这个,我会让你知道的!太棒了,这与詹姆斯·索普在评论中所说的有关。在清理代码时,我没有意识到我的名字被resharper更改了。我需要试试这个,我会让你知道的!