问题描述
我正在构建一个可重用的函数来反序列化JSON字符串。
JSON反序列化例程需要一个对象类型(jsonTestObject)。这一切都按预期工作。
// serialize json to object
jsonTestObject testO = new jsonTestObject();
testO = Newtonsoft.Json.JsonConvert.DeserializeObject<jsonTestObject>(jsonString);
当我尝试将其包装在可重用的函数中以反序列化我发送的“任何”对象类型时,遇到了问题。我不确定如何强类型地将对象类型作为参数传递给函数。
我想将“任意”对象类型发送到函数中,并将结果转换为所需的对象类型(因为我将知道进行调用时期望的对象类型。)
我不想为我要序列化/反序列化的所有类硬编码单独的函数。
这是我所无法使用的...
JSONdeserialize(string jSONstring,Type t)
{
object newObject;
// deserialize object based on the original object type that was passed in.
newObject = JsonConvert.DeserializeObject<t>(jSONstring); //ERROR LINE
return newObject;
}
jsonTestObject jsonObject = new jsonTestObject();
object o = JSONdeserialize(jsonString,jsonObject.GetType());
jsonObject = (jsonTestObject)o;
错误:“'t'是变量,但像类型一样使用”
解决方法
newObject = JsonConvert.DeserializeObject(jSONstring,t);
,
代码可以用两种方式编写。
public void JSONdeserialize<T>(string jSONstring)
{
return JsonConvert.DeserializeObject<T>(jSONstring);
}
jsonTestObject jsonObject = new jsonTestObject();
object o = JSONdeserialize<jsonTestObject>(jsonString);
jsonObject = (jsonTestObject)o;
或
public void JSONdeserialize(string jSONstring,Type type)
{
return JsonConvert.DeserializeObject(jSONstring,type);
}
jsonTestObject jsonObject = new jsonTestObject();
object o = JSONdeserialize(jsonString,typeof(jsonTestObject));
jsonObject = (jsonTestObject)o;