System.Text.Json 可以像 IContractResolver 一样实现选择性序列化吗?
新的 System.Text.Json 命名空间缺少与 Newtonsoft 完全相同的命名空间IContractResolver。但是,.NET 7 引入了合约自定义,它提供了类似的功能。
.NET 7 中的合约自定义
合约自定义允许用户使用 IJsonTypeInfoResolver 自定义 JSON 序列化元数据界面。通过实现此接口,开发人员可以创建自己的合约解析器来指定要序列化的属性。
创建自定义合约解析器
创建选择性合约解析器序列化字段,可以按照以下步骤操作:
定义流畅的扩展方法来修改DefaultJsonTypeInfoResolver:
public static DefaultJsonTypeInfoResolver SerializeSelectedFields(this DefaultJsonTypeInfoResolver resolver, IEnumerable<string> membersToSerialize);
在 JsonSerializerOptions 中设置 TypeInfoResolver:
var options = new JsonSerializerOptions { TypeInfoResolver = new DefaultJsonTypeInfoResolver() .SerializeSelectedFields("FirstName,Email,Id"), ... };
示例
以下代码演示如何使用合约自定义有选择地序列化“FirstName”、“Email”和“Id”属性:
var options = new JsonSerializerOptions { TypeInfoResolver = new DefaultJsonTypeInfoResolver() .SerializeSelectedFields("FirstName,Email,Id"), ... }; // Serialize the object var json = JsonSerializer.Serialize(obj, options);
附加说明
以上是System.Text.Json能否像Newtonsoft的IContractResolver一样实现选择性序列化?的详细内容。更多信息请关注PHP中文网其他相关文章!