首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将反序列化的动态Json转换为强类型类

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

Stack Overflow用户
提问于 2015-08-04 02:19:47
回答 2查看 2.6K关注 0票数 2

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

代码语言:javascript
代码运行次数:0
运行
复制
public override object Serialize(object message)
{
   return new JavaScriptSerializer().Serialize(message);
}

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

代码语言:javascript
代码运行次数:0
运行
复制
public override object Deserialize(object message)
{
   return new JavaScriptSerializer().Deserialize<dynamic>(message.ToString());
}

但是我真的想返回的是实际的类,类中的属性填充了来自响应消息的数据。我和GetType一起玩过

代码语言:javascript
代码运行次数:0
运行
复制
return new JavaScriptSerializer().Deserialize(message.ToString(), typeof(Some Class));

但是,如果不事先了解响应类,我就无法尝试任何操作。我考虑过将类名存储在Json对象中,并使用Activator将其拆分,但是是否有更干净的方法来做到这一点呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-04 02:57:36

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

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

票数 2
EN

Stack Overflow用户

发布于 2015-08-04 02:54:28

尝试使用泛型方法

代码语言:javascript
代码运行次数:0
运行
复制
public  T Deserialize<T>(object message)
{
    return new JavaScriptSerializer().Deserialize<T>(message.ToString());
} 
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31799661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档