gpt4 book ai didi

c# - 使用自定义 ContractResolver 将 JSON.NET 反序列化属性名称转换为 ExpandoObject

转载 作者:行者123 更新时间:2023-11-30 15:31:31 33 4
gpt4 key购买 nike

我有这个 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_namelast_name匹配我的模型/数据库列名称,但它的属性仍然匹配 JSON。直接反序列化为 Personfirst_namelast_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/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com