JSON.NET无法从JSON数组反序列化List <string>

时间:2017-06-27 21:41:23

标签: c# json json.net

我遇到了使用JSON.net的DeserializeObject反序列化属性的问题。 JSON格式正确,可以使用DeserializeObject提取并访问动态属性,但是当我从模型反序列化时,该属性始终为null。

我正在使用JSON.net的v10。

有问题的财产定义如下:

    [JsonProperty(PropertyName = "email")]
    public List<string> EmailAddresses { get; set; }  

Json在下面:

  "representative" : {
    "id" : 16,
    "username" : "jb",
    "firstName" : "James",
    "lastName" : "Bond",
    "emailAddress" : "demo@backstopsolutions.com"
  },
  "email" : [ "test213@example.com", "test312@backstopsolutions.com" ],
  "permissionTag" : "Public",
  "website" : null,

当我用它的类型反序列化对象时,即

var restResponse = await client.ExecuteTaskAsync<T>(request, cancelToken);

该属性为null。

我可以执行以下操作,但我更倾向于弄清楚反序列化失败的原因。

dynamic jsonResponse = JsonConvert.DeserializeObject(restResponse.Content);
var tagsJArray = jsonResponse.email as JArray;
if (tagsJArray != null)
{
    restResponse.Data.EmailAddresses = tagsJArray.ToObject<List<string>>();
}

我认为我错过了一个JsonProperty属性,但我没有尝试过任何工作。任何人都可以帮忙解释一下吗?

提前致谢。

2 个答案:

答案 0 :(得分:0)

如果包含EmailAddresses属性的类的名称是Example,那么您应该反序列化您的JSON,如下所示:

var restResponse = await client.ExecuteTaskAsync<Example>(request, cancelToken);

答案 1 :(得分:0)

像往常一样,这是一个误解的问题。我使用的客户端最近已切换到RestSharp.RestClient,但我们没有更新我们的属性,他们被忽略了。一旦我们切换到适当的属性集,该字段就会被正确反序列化。