如何将“未知”对象作为参数传递并使用其原始对象类型反序列化

问题描述

我正在构建一个可重用的函数来反序列化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;

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...