我有一个这样注释的模型:
[DataMember(EmitDefaultValue = false)]
[JsonProperty("extension_{0}_name")]
public string name {get; set;}
此数据正在通过查询检索到Azure域,并且通过邮递员,我可以看到实际的属性正在特定字段中填充:
{
"extension_129af129412_name":"John",
...
}
其中129af129412
与AzurePropertyExtensionId
属性匹配,该属性在我的Web.Config中定义为:
<appSettings>
<add key="AzurePropertyExtensionId" value="129af129412" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/>
</appSettings>
但是,当我尝试使用JsonConvert.DeserializeObject<>
反序列化对象时,不会检索到该字段。我怀疑这是因为绑定是在字段name_{0}_property
而不是name_129af129412_property
上进行的。
我猜想Web.Config的xdt:Transform
属性有问题:谁撰写它都假设JsonProperty
名称会被正确重写,但事实并非如此。使用JsonConvert
进行序列化后,该字段将序列化为extension_{0}_name
。怎么了?
旁注:Azure有一个有趣的举动,就是我们将使用{0}
占位符的序列化模型发送到Azure,并且该字段始终保存在Azure上。因此,似乎我们在WebServer上由于字段名称之间的不匹配而无法对字段进行反序列化,但Azure能够自行解决此问题。我想了解如何做到这一点。
答案 0 :(得分:0)
事实证明,有一个ContractResolver
实例负责JsonProperty
字段名称的转换,但没有作为JsonSerializerSettings
的一部分传递。将解析程序实例添加到(取消)序列化步骤后,便已成功检索到该字段。