首页 > 解决方案 > 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
    }
}

标签: system.text.json

解决方案


推荐阅读