如何将 "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;