问题描述
假设您有以下 json 部分:
{ "Behavior": "BehaviorTypeA" }
当您反序列化 json 时,反序列化器实质上会将数据从 json 文本导入到类定义中,这可能类似于:
public class MyClass
{
public string Behavior { get; set; }
}
但是假设您希望该数据指示某种行为,因此您的类定义可能是
public class MyClass
{
public BaseBehavior Behavior { get; set; }
}
你也有定义
public class BaseBehavior
{
public abstract void DoIt();
}
和
public class BehaviorTypeA : BaseBehavior
{
public override void DoIt()
{
// some functionality
}
}
这是否可以通过 json 反序列化实现,如果可以,那么 json 必须是什么以及如何完成?是否可能需要自定义解串器并可能需要添加反射代码? (BaseBehavior 类不必是抽象类,并且可能包含成员字段。)
解决方法
当然,您始终可以使用自定义逻辑注入自己的 JsonConverter,以使用您想要的功能实例化您想要的类。
我认为您可以使用此库更轻松地完成此操作:How to mount a host directory in a Docker container
假设您使用的是 Newtonsoft.Json,以下是关于完全自定义的 JsonConverters 的一些信息:https://github.com/manuc66/JsonSubTypes
您基本上遵循一种策略模式,其中您想要的每个行为都需要作为自己的类存在,然后您可以根据它们的名称拼凑出任何一组行为。