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