将反序列化的动态Json转换为强类型类

本文关键字:强类型 转换 Json 反序列化 动态 | 更新日期: 2023-09-27 18:06:06

我有一个消息格式化器类,它需要能够序列化和反序列化JSON消息。这个集中的类将由从服务器发送和接收消息的单独客户端调用。我遇到的问题是,我不知道我将在响应消息上接收到什么类类型。序列化部分没问题,代码如下:

public override object Serialize(object message)
{
   return new JavaScriptSerializer().Serialize(message);
}

我能得到的最接近的方法是使用像这样的动态操作符进行反序列化。

public override object Deserialize(object message)
{
   return new JavaScriptSerializer().Deserialize<dynamic>(message.ToString());
}

但是我真正想要返回的是实际的类,类中的属性填充了来自响应消息的数据。我玩过GetType和其他选项,如

return new JavaScriptSerializer().Deserialize(message.ToString(), typeof(Some Class));

但是,如果事先不知道响应类,我所尝试的一切都将不起作用。我考虑过将类名存储在Json对象中,并使用Activator来启动它,但是是否有更干净的方法来做到这一点?

将反序列化的动态Json转换为强类型类

你可以使用JSON代替JavaScriptSerializer。NET并在序列化期间嵌入类型信息。请看下面的细节:http://www.newtonsoft.com/json/help/html/SerializeTypeNameHandling.htm

那么你可以在反序列化过程中从Json字符串中提取类型信息,如下所示:Json。Net -反序列化到对象

时获取类型名称

尝试使用泛型方法

public  T Deserialize<T>(object message)
{
    return new JavaScriptSerializer().Deserialize<T>(message.ToString());
}