我有一个消息格式化类,它需要能够序列化和反序列化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将其拆分,但是是否有更干净的方法来做到这一点呢?
发布于 2015-08-03 18:57:36
不使用JavaScriptSerializer,您可以在序列化期间使用JSON.NET并嵌入类型信息。详情请参阅此:http://www.newtonsoft.com/json/help/html/SerializeTypeNameHandling.htm
然后,您可以在反序列化期间从Json字符串中提取类型信息,如下所示:Json.Net - Get type name when deserializing to JObject
发布于 2015-08-03 18:54:28
尝试使用泛型方法
public T Deserialize<T>(object message)
{
return new JavaScriptSerializer().Deserialize<T>(message.ToString());
}
https://stackoverflow.com/questions/31799661
复制