在没有属性的类上全局使用JsonConverter
我有一个MVC .net项目,我正在使用mongodb。 我使用自定义JsonConverter将ObjectId属性序列化为字符串,正如我在这个答案中描述的那样: 在MVC中自动将mongodb ObjectId作为字符串与Json.NET一起重新编写
在那里我使用了一个属性,以便自定义转换器用于某个属性: [JsonConverter(typeof(ObjectIdConverter))
有没有办法告诉序列化器在ObjectId类型的所有属性上使用ObjectIdConverter? 我不想继续讨论整个项目并添加这个属性。
谢谢!
是的,您可以使用自定义IContractResolver
以编程方式将JsonConverter
应用于类或属性。 最简单的方法是从DefaultContractResolver
类派生您的解析器,然后覆盖适当的方法。 下面是一个示例解析器,它指示Json.Net在ObjectId
类型的所有实例上使用ObjectId
,而不管它们可能出现在哪个类中。
class CustomResolver : DefaultContractResolver { protected override JsonObjectContract CreateObjectContract(Type objectType) { JsonObjectContract contract = base.CreateObjectContract(objectType); if (objectType == typeof(ObjectId)) { contract.Converter = new ObjectIdConverter(); } return contract; } }
要使用解析程序,可以构造一个JsonSerializer
实例并在其上设置ContractResolver
属性,然后使用该实例进行序列化/反序列化。 如果您使用的是JObject.ToObject()
和JObject.FromObject()
,请注意两个方法都具有接受JsonSerializer
实例的重载。
JsonSerializer serializer = new JsonSerializer(); serializer.ContractResolver = new CustomResolver(); JObject jo = JObject.FromObject(foo, serializer);
或者,如果您使用JsonConvert
类进行序列化/反序列化,则可以创建JsonSerializerSettings
的实例,在其上设置ContractResolver
属性,然后将设置传递给SerializeObject()
和DeserializeObject()
方法。
JsonSerializerSettings settings = new JsonSerializerSettings(); settings.ContractResolver = new CustomResolver(); Foo foo = JsonConvert.DeserializeObject(json, settings);
希望这可以帮助。
上述就是C#学习教程:在没有属性的类上全局使用JsonConverter分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1024444.html