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

时间:2015-08-04 02:19:48

标签: c# json serialization dynamic javascriptserializer

我有一个消息格式化程序类,需要能够序列化和反序列化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进行旋转,但是有更简洁的方法吗?

2 个答案:

答案 0 :(得分:2)

尝试使用通用方法

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

答案 1 :(得分:2)

您可以使用JSON.NET并在序列化期间嵌入类型信息,而不是使用JavaScriptSerializer。请查看详细信息: http://www.newtonsoft.com/json/help/html/SerializeTypeNameHandling.htm

然后,您可以在反序列化期间从Json字符串中提取类型信息,如下所示: Json.Net - Get type name when deserializing to JObject