假设我有以下代码:
public MessageClass(string _paramJson)
{
string[] Messages = new string[] { "MessageA", "MessageB" };
Messages[0] _model0 = JsonConvert.DeserializeObject<Messages[0]>(paramJson);
Messages[1] _model1 = JsonConvert.DeserializeObject<Messages[1]>(paramJson);
}
我知道上面的方法不起作用,但是我想要做的只是基于作为字符串参数传递的Type对JSON进行反序列化。即。 MessageA
或MessageB
。
即使我将Messages
定义为List<Type>
,然后例如执行Messages.Add(typeof(MessageA));
,我以后如何获得type
并将其传递给DeserializedObject<here-some-type-from-my-list>(paramJson)
?
任何帮助表示赞赏。
答案 0 :(得分:0)
为此,您必须使用 reflection 将MessageA
和MessageB
转换为Type
对象,然后使用反射来动态创建该类型的通用方法的实例,因此您可以调用它。
对于第一部分,请参见Type.GetType
method documentation。
var type = Type.GetType("Namespace.Prefix.Message1, AssemblyName");
您可以使用non-generic version of DeserializeObject
跳过第二部分:
var message = JsonConvert.DeserializeObject(paramJson, type);