JSON.NET反序列化属性名称转换为具有自定义ContractResolver的ExpandoObject
我有这个JSON:
{"firstName": "John","lastName": "Doe"}
这个JSON.NET合同解析器:
public class CustomContractResolver : DefaultContractResolver{ protected override string ResolvePropertyName(string propertyName) { return propertyName.Replace("_",""); } }
我有这个WebApi Controller方法,使用expando来使用提供的字段部分更新db行:
public virtual int Post(int id, JObject content) { var obj = JsonConvert.DeserializeObject(content.ToString(), new JsonSerializerSettings { ContractResolver = new CustomContractResolver() }); db.Update(id, obj) }
我希望反序列化的expando具有属性first_name
和last_name
以匹配我的模型/ db列名,但是它的属性仍然匹配JSON。 直接反序列化为Person
有first_name
和last_name
有效,正如LB帮助我在下面发现的那样,但是我的db层需要一个Expando来进行部分记录更新,否则它会吹掉没有被json指定的Person
任何属性,因此返回null
在模型中。
我可以在ContractResolver中做什么来转换Expando的属性?
您可以在反序列化时使用此ContractResolver
var obj = JsonConvert.DeserializeObject( json, new JsonSerializerSettings { ContractResolver = new CustomContractResolver() });
public class CustomContractResolver : Newtonsoft.Json.Serialization.DefaultContractResolver { protected override string ResolvePropertyName(string propertyName) { return propertyName.Replace("_",""); } }
- 使用angularjs将多个对象发送到webapi
- 为什么这个代码在通过TPL / Tasks执行时会失败?
- 如何使用不允许异步控制器操作的CMS处理异步API调用?
- 使用MemoryStream和ZipArchive将zip文件返回到asp.net web api中的客户端
- 如何正确映射WebAPI路由
- Web API响应时间
- WebApi.Owin中的SuppressDefaultHostAuthentication还禁止webapi之外的身份validation
- 如何为某个特定类型而不是全局设置Json.NET ContractSerializer?
- 在ASP.NET Core Web API中注册新的DelegatingHandler