上下文:我正在将数据序列化为消息队列。消息队列将接受异构类型,这些类型需要由接收方反序列化。
问题:通常在反序列化时,我会使用类似以下的代码:
JsonConvert.DeserializeObject<Type>(object);
但是,由于类型是异构的,所以我不会提前知道所需的类型。
我知道我可以使用TypeNameHandling将类型嵌入JSON中,但是在调用DeserializeObject时,我仍然没有得到强类型化的结果(例如,返回的对象尚未转换为嵌入的Type)。
问题:Json.Net可以将反序列化的对象转换为Json中嵌入的类型吗?如果不是,我最好的选择是从JSON获取类型,然后调用DeserializeObject以便可以转换对象?
答案 0 :(得分:2)
您可以在数据中嵌入类型(类)名称。反序列化时,可以使用一点反射和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);