我有这个JSON:
{"firstName": "John","lastName": "Doe"}
此JSON.NET合同解析程序:
public class CustomContractResolver : DefaultContractResolver{
protected override string ResolvePropertyName(string propertyName)
{
return propertyName.Replace("_","");
}
}
我有一个WebApi Controller方法,它使用expando来使用提供的字段对数据库行进行部分更新:
public virtual int Post(int id, JObject content)
{
var obj = JsonConvert.DeserializeObject<ExpandoObject>(content.ToString(), new JsonSerializerSettings { ContractResolver = new CustomContractResolver() });
db.Update<Person>(id, obj)
}
我希望反序列化的expando的属性first_name
和last_name
与我的model/db列名匹配,但它的属性仍然与JSON匹配。直接反序列化到Person
可以使用first_name
和last_name
,正如L.B.在下面帮助我发现的那样,但我的数据库层需要一个Expando来进行部分记录更新,否则它会破坏Person
的任何未由json指定的属性,从而破坏模型中的null
。
我可以在ContractResolver中做些什么来转换Expando的属性?
您可以在反序列化时使用此ContractResolver
var obj = JsonConvert.DeserializeObject<Person>(
json,
new JsonSerializerSettings {
ContractResolver = new CustomContractResolver()
});
public class CustomContractResolver : Newtonsoft.Json.Serialization.DefaultContractResolver
{
protected override string ResolvePropertyName(string propertyName)
{
return propertyName.Replace("_","");
}
}