62,243
社区成员




JObject obj = JObject.Parse(jsonStr);
Type type = 反射加载命令处理对象((int)obj["type"]);
var cmd = (IMyCommand)Activator.CreateInstance(type);
var evt = cmd.ParseContent((JObject)obj["event_content"]);
这里,通过 jsonStr,来获得 type,然后获得 cmd,并且知道所有的实现了 IMyCommand 接口的对象都实现 ParseContent 函数功能,返回一个具有 IMyEventContent 接口的数据对象。于是反射出来命令处理对象 cmd,调用其 ParseContent 功能。
而不同的命令处理对象,其 ParseContent 函数内部返回的具体的对象的类型是不同的。但是你要按照业务接口来设计开发。override
object ParseContent(JObject obj)
{
return obj.ToObject<ATM>();
}
并且你的解析程序的多态代码可以写为(IMyEventContent)command.ParseContent((JObject)obj["event_content"]);
编程设计要按照接口来理解和执行。如果你设计软件时根本不知道 IMyEventContent 的业务含义,那么你根本无需解析 json 中的 event_content 这个 token。如果你知道接口的业务含义,但是你需要根据 type 为 1 时反射获取命令处理类型,那么这就一定是多态调用 ParseContent 并且返回 IMyEventContent 的设计模式了。