RestSharp - 使用无效键名(包含句点)反序列化JSON响应

5

我在这个问题上卡了很久。我收到的JSON响应发送的键包括句点。例如:“cost_center.code”。

我该如何将其放入我的对象中?我没有收到任何错误,但是值仅作为null进入,并未反序列化为我的类。

这是我的类:

public class Result
{
    public string company { get; set; }
    public string first_name { get; set; }
    public string email { get; set; }
    public string employee_id { get; set; }
    public string last_name { get; set; }
    [DeserializeAs(Name="cost_center.code")]
    public string cost_center { get; set; }
}

public class RootObject
{
    public List<Result> result { get; set; }
}

以下是JSON响应:

{
  "result": [
    {
      "company": "My Company",
      "first_name": "First",
      "email": "example@fakeaddress.com",
      "employee_id": "123456789",
      "last_name": "Last",
      "cost_center.code": "12345"
    }
  ]
}

我使用以下命令进行执行:

var response = client.Execute<List<RootObject>>(request);
// this returns null
Console.WriteLine(response.Data[0].result[0].cost_center);
// all other values return fine ex:
Console.WriteLine(response.Data[0].result[0].company);

我尝试了使用DeserializeAs和不使用它。我不确定它是否起作用。我是否错误地使用了这个属性?这是列表的容器问题吗?


编辑并接受下面的答案,使用JsonProperty解决了这个问题。对于其他可能遇到此问题的人来说,这是解决方案。

添加JSON.net nuget。

using Newtonsoft.Json;

按照以下方式设置JsonProperty:

[JsonProperty("cost_center.code")]

我把我的执行代码改成了:

var response = client.Execute(request);

然后像这样反序列化它:

var jsonResponse = JsonConvert.DeserializeObject<RootObject>(response.Content);

然后我就可以访问这个值:

Console.WriteLine(jsonResponse.result[0].CostCenter

可能是RestSharp Serialize/Deserialize Naming Conversion的重复问题。 - dbc
2个回答

2

针对属性名称中含有句点的属性执行以下操作:

[JsonProperty("cost_center.code")]
public string CostCenter{ get; set; }

它应该能够正常工作


0
如果您想要原生使用RestSharp或者无法让“Newtonsoft.Json.JsonSerializer”支持工作(我无法实现该功能),他们在“106.1.0”版本中新增了属性名称中带有点的适当反序列化支持。
请查看此处的我的回应:访问属性名称中带有点的属性

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接