上下文:我将数据序列化为消息队列。消息队列将接受异构类型,需要由接收器进行反序列化。
问题:通常在反序列化时,我会使用如下代码:JsonConvert.DeserializeObject<Type>(object);
但是,因为类型是异构的,所以我不会提前知道所需的类型。
我知道我可以使用TypeNameHandling在JSON中嵌入该类型,但是当调用DeserializeObject时,我仍然没有得到强类型的结果(因为,返回的对象不会被强制转换为嵌入的Type)。
问题:Json.Net可以将反序列化的对象转换为Json中嵌入的类型吗?如果没有,是我从JSON获取类型然后调用DeserializeObject以便可以转换对象的最佳选择吗?
您可以将Type(类)名称嵌入到数据中。反序列化时,你可以使用一点点反射和JsonConvert.DeserializeObject(string, Type):
string typeName; //Got from message
string json; //Got from message
Type type = Type.GetType($"Namespace.{typeName}, MyAssembly");
var obj = JsonConvert.DeserializeObject(json, type);