RestSharp -反序列化具有无效键名(包含句点)的json响应

本文关键字:句点 包含 响应 json 反序列化 无效 RestSharp | 更新日期: 2023-09-27 18:16:46

我已经被这个问题困扰了一段时间。我有一个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);

我已经尝试过使用和不使用deserializea。我不确定它是否有效。我是否错误地使用了这个属性?是列表的容器问题吗?


编辑并接受下面使用JsonProperty的答案。对于其他可能出现的人来说,这是解决方案。

添加JSON.net nuget.

using Newtonsoft.Json;

按照描述设置JsonProperty:

[JsonProperty("cost_center.code")]

将我的execute改为:

var response = client.Execute(request);

然后像这样反序列化:

var jsonResponse = JsonConvert.DeserializeObject<RootObject>(response.Content);
然后我可以访问值:
Console.WriteLine(jsonResponse.result[0].CostCenter

RestSharp -反序列化具有无效键名(包含句点)的json响应

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

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

应该可以

如果您想本地使用RestSharp或无法获得Newtonsoft.Json。JsonSerializer支持工作(我不能),他们只是在106.1.0中添加了对名称中带有点的属性的正确反序列化支持。

访问名称中带点的属性