将反序列化的动态 Json 转换为强类型 类
Convert deserialized dynamic Json to strongly typed classes
我有一个消息格式化程序 class,它需要能够序列化和反序列化 JSON 消息。这个集中式 class 将由一个单独的客户端调用,该客户端从服务器发送和接收消息。我 运行 遇到的问题是我不知道 class 我将在响应消息中收到什么类型。序列化部分没问题,代码如下。
public override object Serialize(object message)
{
return new JavaScriptSerializer().Serialize(message);
}
我能得到的最接近的结果是像这样使用动态运算符反序列化。
public override object Deserialize(object message)
{
return new JavaScriptSerializer().Deserialize<dynamic>(message.ToString());
}
但我真的想 return 是实际的 class,class 中的属性填充了响应消息中的数据。我玩过 GetType
和其他选项,例如
return new JavaScriptSerializer().Deserialize(message.ToString(), typeof(Some Class));
但是如果事先不知道响应 class,我所做的任何尝试都无法奏效。我考虑过将 class 名称存储在 Json 对象中并使用 Activator 来启动它,但是有没有更简洁的方法来做到这一点?
尝试使用通用方法
public T Deserialize<T>(object message)
{
return new JavaScriptSerializer().Deserialize<T>(message.ToString());
}
您可以使用 JSON.NET 并在序列化期间嵌入类型信息,而不是使用 JavaScriptSerializer。详情请看这个:
http://www.newtonsoft.com/json/help/html/SerializeTypeNameHandling.htm
然后你可以在反序列化过程中从Json字符串中提取类型信息,如下所示:
Json.Net - Get type name when deserializing to JObject
我有一个消息格式化程序 class,它需要能够序列化和反序列化 JSON 消息。这个集中式 class 将由一个单独的客户端调用,该客户端从服务器发送和接收消息。我 运行 遇到的问题是我不知道 class 我将在响应消息中收到什么类型。序列化部分没问题,代码如下。
public override object Serialize(object message)
{
return new JavaScriptSerializer().Serialize(message);
}
我能得到的最接近的结果是像这样使用动态运算符反序列化。
public override object Deserialize(object message)
{
return new JavaScriptSerializer().Deserialize<dynamic>(message.ToString());
}
但我真的想 return 是实际的 class,class 中的属性填充了响应消息中的数据。我玩过 GetType
和其他选项,例如
return new JavaScriptSerializer().Deserialize(message.ToString(), typeof(Some Class));
但是如果事先不知道响应 class,我所做的任何尝试都无法奏效。我考虑过将 class 名称存储在 Json 对象中并使用 Activator 来启动它,但是有没有更简洁的方法来做到这一点?
尝试使用通用方法
public T Deserialize<T>(object message)
{
return new JavaScriptSerializer().Deserialize<T>(message.ToString());
}
您可以使用 JSON.NET 并在序列化期间嵌入类型信息,而不是使用 JavaScriptSerializer。详情请看这个: http://www.newtonsoft.com/json/help/html/SerializeTypeNameHandling.htm
然后你可以在反序列化过程中从Json字符串中提取类型信息,如下所示: Json.Net - Get type name when deserializing to JObject