【问题标题】:Json.NET Failing to Deserialize List<string> from JSON ArrayJson.NET 无法从 JSON 数组反序列化 List<string>
【发布时间】:2017-06-27 21:41:23
【问题描述】:

我在反序列化带有 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);

属性为空。

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

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

我假设我缺少一个 JsonProperty 属性,但我尝试过的任何方法都没有奏效。任何人都可以帮助阐明这一点吗?

提前致谢。

【问题讨论】:

标签: c# json json.net


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2017-04-10
      • 1970-01-01
      • 2020-05-06
      • 1970-01-01
      • 2014-02-08
      • 2012-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多