【发布时间】: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 属性,但我尝试过的任何方法都没有奏效。任何人都可以帮助阐明这一点吗?
提前致谢。
【问题讨论】:
-
这可能会对您有所帮助:stackoverflow.com/a/30147559/1498401 和现场示例:dotnetfiddle.net/ayZBlL
-
您能否将您的问题扩展到完整的minimal reproducible example,显示您的根类型以及您如何构造
client?我试图重现您的问题here,一切似乎都正常。 -
您是仅在 email 属性或所有其他属性上都获得 null 吗?
-
我正在研究每个 dbc 的最小完整且可验证的示例(谢谢,顺便说一句)。 Arman - 所有其他属性都在反序列化没有问题。
-
喂,你的
client实际上是RestSharp.RestClient吗?因为 RestSharp doesn't use Json.NET by default 所以[JsonProperty(...)]什么都不做。