如何将 "unknown" 对象作为参数传递并使用其原始对象类型进行反序列化
How to pass "unknown" object as parameter and use it's original object type to deserialize
我正在构建一个可重复使用的函数来反序列化 JSON 字符串。
JSON 反序列化例程需要一个对象类型 (jsonTestObject)。这一切都按预期工作。
// serialize json to object
jsonTestObject testO = new jsonTestObject();
testO = Newtonsoft.Json.JsonConvert.DeserializeObject<jsonTestObject>(jsonString);
当我尝试将其包装在可重用函数中以反序列化我发送的“任何”对象类型时,我 运行 遇到了问题。我不确定如何将对象类型作为参数传递给函数,因为我不能强类型化它。
我想将“任何”对象类型发送到我的函数并将结果转换为我想要的对象类型(因为我会知道在进行调用时我期望的对象类型。)
我不想为我想要 serialize/deserialize.
的所有 类 硬编码一个单独的函数
这是我有的东西不起作用...
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;
ERROR: "'t' is a variable but is used like a type"
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;
我正在构建一个可重复使用的函数来反序列化 JSON 字符串。
JSON 反序列化例程需要一个对象类型 (jsonTestObject)。这一切都按预期工作。
// serialize json to object
jsonTestObject testO = new jsonTestObject();
testO = Newtonsoft.Json.JsonConvert.DeserializeObject<jsonTestObject>(jsonString);
当我尝试将其包装在可重用函数中以反序列化我发送的“任何”对象类型时,我 运行 遇到了问题。我不确定如何将对象类型作为参数传递给函数,因为我不能强类型化它。
我想将“任何”对象类型发送到我的函数并将结果转换为我想要的对象类型(因为我会知道在进行调用时我期望的对象类型。)
我不想为我想要 serialize/deserialize.
的所有 类 硬编码一个单独的函数这是我有的东西不起作用...
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;
ERROR: "'t' is a variable but is used like a type"
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;