在 System.Text.Json 中自定义序列化合约
新的 System.Text.Json API 提供了自定义序列化合约的功能,提供功能类似于 Newtonsoft 的 IContractResolver。
Contract .NET 7 中的自定义
在 .NET 7 中,可以通过 IJsonTypeInfoResolver 接口进行协定自定义。此接口允许开发人员创建自定义解析器,这些解析器返回指定类型和 JsonSerializerOptions 组合的已配置 JsonTypeInfo 实例。
创建自定义解析器
创建自定义解析器的一种方法是子类化 DefaultJsonTypeInfoResolver 并重写 GetTypeInfo(Type, JsonSerializerOptions) 方法。或者,您可以添加 Action
示例:选择性字段序列化
复制 System.Text 中 SelectiveSerializer 类的功能。 Json,您可以使用类似于以下的修饰符操作以下:
resolver.Modifiers.Add(typeInfo => { if (typeInfo.Kind == JsonTypeInfoKind.Object) { foreach (var property in typeInfo.Properties) { if (property.GetMemberName() is {} name && !membersToSerializeSet.Contains(name)) property.ShouldSerialize = static (obj, value) => false; } } });
此修饰符检查与指定字段名称匹配的属性,并将其 ShouldSerialize 属性设置为 false 以将其排除在序列化之外。
设置解析器
创建自定义解析器后,可以通过JsonSerializerOptions.TypeInfoResolver 属性。例如:
var options = new JsonSerializerOptions { TypeInfoResolver = new DefaultJsonTypeInfoResolver() .SerializeSelectedFields("FirstName,Email,Id"), // Other options as required };
附加说明
以上是如何在 System.Text.Json 中自定义序列化合约?的详细内容。更多信息请关注PHP中文网其他相关文章!