system.text.json - System.Text.Json JsonConverter 与工厂
问题描述
我有DomainObject
将数据和流程结合在一起的。它需要来自服务提供商的一些服务。但是 System.Text.Json 不能使用带有服务的构造函数反序列化对象。所以我想介绍一下DomainObjectFactory
。我如何使用这个工厂进行反序列化?
public record DomainObject
{
private readonly IDateTimeProvider dateTimeProvider;
public Guid Id { get; }
public string Name { get; }
public DomainObject(IDateTimeProvider dateTimeProvider, Guid id, string name)
{
this.dateTimeProvider = dateTimeProvider;
Id = id;
Name = name;
}
}
public class DomainObjectFactory
{
private readonly IDateTimeProvider dateTimeProvider;
public DomainObjectFactory(IDateTimeProvider dateTimeProvider)
{
this.dateTimeProvider = dateTimeProvider;
}
public DomainObject Create(Guid id, string name)
{
return new(dateTimeProvider, id, name);
}
}
我必须使用自定义JsonConverter
吗?或者对我来说有更好的选择吗?
public class DomainObjectJsonConverter : JsonConverter<DomainObject>
{
private readonly DomainObjectFactory domainObjectFactory;
public DomainObjectJsonConverter(DomainObjectFactory domainObjectFactory)
{
this.domainObjectFactory = domainObjectFactory;
}
public override DomainObject Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
return domainObjectFactory.Create( ??? );
}
public override void Write(Utf8JsonWriter writer, DomainObject domainObject, JsonSerializerOptions options)
{
//I don't want to customize this
}
}
解决方案
推荐阅读
- ejabberd - 用于 MIX 的 ejabberd add_channel API
- c - Raspberry Pi (armhf) 交叉编译器无法编译包含库(例如 usb.h)的 C 代码
- java - 如何通过 Messenger onclick 发送远程服务消息
- android - 从片段中获取数据到另一个类
- javascript - 尽管设置了标头,为什么 CORS 无法正常工作?
- python - 如何在张量流中随机选择索引而不是最大值(tf.arg_max)
- android - 将 onclick 侦听器添加到 Xamarin Android 中 ActionBar 上的图标
- reactjs - React 获取另一个组件状态
- postgresql - 无法使用 pg_dump PostgreSQL 备份超表 TimescaleDB 数据库
- api - 为两个不同的系统构建集成 API