我有这个 JSON:
{"firstName": "John","lastName": "Doe"}
这个 JSON.NET 契约(Contract)解析器:
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
匹配我的模型/数据库列名称,但它的属性仍然匹配 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("_","");
}
}
关于c# - 使用自定义 ContractResolver 将 JSON.NET 反序列化属性名称转换为 ExpandoObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20526805/