序列化包含多种不明类型的集合

简介:

代码:/Files/zhuqil/Kirin.rar

导言:

   你是否曾经想过序列化构造对象,它里面有一个集合,这个集合包含接口或者抽象类?你是否不知道所有的你要序列化的类型?好吧,如果这样,那么我可以帮助你。

使用代码:

   让我们开始.首先,你将要将采用下面的帮助类,将它粘贴到你的项目之中。它将帮助你只用一行代码就能序列化一个对象为XML。

 

代码

 

    现在我们已经了解这个方法了,让我们看看我们的问题所在。举一个例子,我们有一个抽象类,Animal。然后有两个继承Animal的类:Human和Dog。

 

代码

 

    现在我们有一个想要序列化的对象。它是HouseHold,它的有一个Animal集合属性:

复制代码
public   class  HouseHold
{
    
public  HouseHold()
    {
        
this .Residents  =   new  List < Animal > ();
    }

    
public  List < Animal >  Residents
    {
        
get ;
        
set ;
    }
}
复制代码

 

   现在,我们序列化这个对象。

代码

 

我们将会得到下面的Exception的Message:

" 生成 XML 文档时出错。

 

下面是 InnerException的Message :

"不应是类型 Kirin.Human。使用 XmlInclude 或 SoapInclude 属性静态指定非已知的类型。 "

 

这里有个关键字“静态”, 我们可以在每个类的顶部放置XmlInclude属性解决这个问题,如:

代码

 

  但如果我们不知道的继承Animal的所有类,如果我们的应用是可延展的,需要能够使用由用户自定义类型,上面的代码是解决不了问题的。让我们向下看,我会告诉你如何可以做到的。

   首先,我们要做的是使HouseHold类实现IXmlSerializable接口,这样我们就可以拦截这个对象的序列化,我们自己去序列它。

  接着,我们构建一个方法,能检查所有的类型,在这个例子中,我们使用反射去查询的所有继承了Animal类的程序集。 

代码

    现在,我们运行我们的测试代码,能顺利通过。希望对你有所帮助,谢谢!

 





本文转自麒麟博客园博客,原文链接:http://www.cnblogs.com/zhuqil/archive/2009/12/15/1624826.html,如需转载请自行联系原作者

相关文章
|
2月前
|
JSON 缓存 NoSQL
redis序列化数据时,如何包含clsss类型信息?
通过配置 `com.fasterxml.jackson.databind.ObjectMapper` 的 `enableDefaultTyping` 方法,可以使序列化后的 JSON 包含类信息。
52 2
|
5月前
|
Java
springboot解决jackson序列化Long类型精度失效问题
springboot解决jackson序列化Long类型精度失效问题
138 0
|
数据库
序列化类型为XX的对象时检测到循环引用
序列化类型为XX的对象时检测到循环引用
67 0
|
Android开发
Android 中使用Gson进行list集合的序列化与反序列化
Android 中使用Gson进行list集合的序列化与反序列化
190 0
|
Dubbo 应用服务中间件
Dubbo使用Hessian2序列化时针对Byte类型出现java.lang.ClassCastException
Dubbo使用Hessian2序列化时针对Byte类型出现java.lang.ClassCastException
182 0
|
存储 分布式计算 JavaScript
Fury系列(四):一个比Kryo/Hessian快30~40倍的类型前后兼容序列化器
问题背景类型前后兼容是复杂业务场景序列化的常见需求。在快速迭代的业务场景当中,读写端经常发生对象字段发生变更:在线应用场景:线上SOFA/HSF应用提供服务给多个调用方,服务的滚动升级以及各个调用方独立更新都可能导致对象类型不一致的情况;在线服务场景:在线服务框架常驻不更改对象类型,但调用方业务逻辑变动独立更新导致对象字段跟服务端不一致;对象持久化场景:对象数据序列化后持久化写入存储(如Spark
1591 2
Fury系列(四):一个比Kryo/Hessian快30~40倍的类型前后兼容序列化器
|
存储 SQL Web App开发
阿里一面:Flink的类型与序列化怎么做的
阿里一面:Flink的类型与序列化怎么做的
423 0
阿里一面:Flink的类型与序列化怎么做的
|
JSON 编译器 Go
Go-结构体类型详解(声明、初始化、结构体指针、方法、序列化等)
Go-结构体类型详解(声明、初始化、结构体指针、方法、序列化等)
197 0
Go-结构体类型详解(声明、初始化、结构体指针、方法、序列化等)
|
分布式计算 资源调度 Java
Hadoop中的MapReduce概述、优缺点、核心思想、编程规范、进程、官方WordCount源码、提交到集群测试、常用数据序列化类型、WordCount案例实操
Hadoop中的MapReduce概述、优缺点、核心思想、编程规范、进程、官方WordCount源码、提交到集群测试、常用数据序列化类型、WordCount案例实操
Hadoop中的MapReduce概述、优缺点、核心思想、编程规范、进程、官方WordCount源码、提交到集群测试、常用数据序列化类型、WordCount案例实操
|
设计模式 JSON fastjson
替换seata BusinessActionContext序列化方式,从根源上解决反序列化类型不一致问题
替换seata BusinessActionContext序列化方式,从根源上解决反序列化类型不一致问题
192 0
下一篇
无影云桌面