首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有"formattable“名称的C# JsonProperty

具有"formattable“名称的C# JsonProperty
EN

Stack Overflow用户
提问于 2018-08-10 22:02:34
回答 1查看 74关注 0票数 1

我有一个这样注释的模型:

代码语言:javascript
复制
[DataMember(EmitDefaultValue = false)]
[JsonProperty("extension_{0}_name")]
public string name {get; set;}

这些数据是通过查询Azure域来检索的,通过Postman,我可以看到在特定字段中填充的实际属性:

代码语言:javascript
复制
{
     "extension_129af129412_name":"John",
     ...
}

其中129af129412AzurePropertyExtensionId属性匹配,该属性在我的Web.Config中定义为:

代码语言:javascript
复制
<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本身就有能力克服这个问题。我有兴趣了解这是如何实现的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-10 22:30:29

事实证明,有一个ContractResolver实例负责JsonProperty字段名的转换,该实例没有作为JsonSerializerSettings的一部分传递。将冲突解决程序实例添加到(反)序列化步骤后,即可成功检索该字段。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51788237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档