通过将类作为字符串参数传递来反序列化JSON

时间:2018-07-19 00:59:36

标签: c# json parameter-passing deserialization

假设我有以下代码:

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进行反序列化。即。 MessageAMessageB

即使我将Messages定义为List<Type>,然后例如执行Messages.Add(typeof(MessageA));,我以后如何获得type并将其传递给DeserializedObject<here-some-type-from-my-list>(paramJson)

任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

为此,您必须使用 reflection MessageAMessageB转换为Type对象,然后使用反射来动态创建该类型的通用方法的实例,因此您可以调用它。

对于第一部分,请参见Type.GetType method documentation

var type = Type.GetType("Namespace.Prefix.Message1, AssemblyName");

您可以使用non-generic version of DeserializeObject跳过第二部分:

var message = JsonConvert.DeserializeObject(paramJson, type);