json-lib net.sf.ezmorph.bean.MorphDynaBean cannot be cast to xxx

简介:

在使用json-lib 反序列化时,报错:

Exception in thread "main" Java.lang.ClassCastException: net.sf.ezmorph.bean.MorphDynaBean cannot be cast to com.jn.json.bean.Student

at com.jn.test.Test2.test_reserialize(Test2.java:104)

at com.jn.test.Test2.main(Test2.java:110)

 

项目结构如下(源代码见附件):

 依赖的库如下:

json-lib-2.1-jdk15.jar


 测试代码如下:把字符串转化为java对象

Java代码   收藏代码
  1. public static void test_reserialize(){  
  2. //      String jsonInput="{\"className\":\"计算机0705\",\"count\":0,\"students\":[{\"addrr\":null,\"age\":0,\"hobby\":\"\",\"name\":\"\"}]}";  
  3.         String jsonInput="{\"classAttribute\":{\"pp1\":\"vv1\",\"pp2\":\"vv2\"},\"className\":\"计算机0705\",\"count\":0,\"students\":[{\"addrr\":null,\"age\":0,\"attribute\":{\"p2\":\"v2\",\"p1\":\"v1\"},\"hobby\":\"\",\"name\":\"\"}]}";  
  4.         JSONObject js = JSONObject.fromObject(jsonInput);  
  5.         Class2 one = (Class2) JSONObject.toBean(js, Class2.class);  
  6.         System.out.println(one.getClassName());  
  7.         Map<String, Object> attribute =one.getStudents().get(0).getAttribute();  
  8.         System.out.println(attribute);  
  9.           
  10.     }  
  11.       
  12.     public static void main(String[] args) {  
  13.         test_reserialize();  
  14.     }  

 运行时报错:

 

解决方法:

使用JsonConfig,修改后的代码如下:

Java代码   收藏代码
  1. public static void test_reserialize(){  
  2.   
  3.         String jsonInput="{\"classAttribute\":{\"pp1\":\"vv1\",\"pp2\":\"vv2\"},\"className\":\"计算机0705\",\"count\":0,\"students\":[{\"addrr\":null,\"age\":0,\"attribute\":{\"p2\":\"v2\",\"p1\":\"v1\"},\"hobby\":\"\",\"name\":\"\"}]}";  
  4.         JSONObject js = JSONObject.fromObject(jsonInput);  
  5.           
  6.         JsonConfig jsonConfig = new JsonConfig();  
  7.   
  8.         jsonConfig.setRootClass(Class2.class);  
  9.         Map<String, Class> classMap = new HashMap<String, Class>();  
  10.         classMap.put("students", Student.class); // 指定JsonRpcRequest的request字段的内部类型  
  11.         jsonConfig.setClassMap(classMap);  
  12.           
  13.           
  14.           
  15.         Class2 one = (Class2) JSONObject.toBean(js, jsonConfig);  
  16.         System.out.println(one.getClassName());  
  17.         Map<String, Object> attribute =one.getStudents().get(0).getAttribute();  
  18.         System.out.println(attribute);  
  19.           
  20.     }  
  21.       

 主要增加了:

JsonConfig jsonConfig = new JsonConfig();

 

jsonConfig.setRootClass(Class2.class);

Map<String, Class> classMap = new HashMap<String, Class>();

classMap.put("students", Student.class); // 指定JsonRpcRequest的request字段的内部类型

jsonConfig.setClassMap(classMap);

相关文章
|
6月前
|
JSON 开发框架 API
【推荐100个unity插件之20】一个强大的JSON处理库——Newtonsoft.Json(也称为Json.NET)
【推荐100个unity插件之20】一个强大的JSON处理库——Newtonsoft.Json(也称为Json.NET)
532 0
|
6月前
|
JSON 数据格式 微服务
.NET下 支持大小写不敏感的JSON Schema验证方法
有很多应用程序在验证JSON数据的时候用到了JSON Schema。 在微服务架构下,有时候各个微服务由于各种历史原因,它们所生成的数据对JSON Object属性名的大小写规则可能并不统一,它们需要消费的JSON数据的属性名可能需要大小写无关。 遗憾的是,目前的JSON Schema没有这方面的标准,标准中都是大小写敏感的。在类似上述情况下,这给使用JSON Schema进行数据验证造成了困难。
|
SQL JSON 开发框架
.NET 中的 Json 使用体验
本文主要总结介绍.NET 中的对 Json 数据使用在使用过程中的关于编码、循环引用、时间格式化的一些问题
194 0
.NET 中的 Json 使用体验
|
存储 JSON JavaScript
.NET MVC第九章、Web Api Json序列化与反序列化
.NET MVC第九章、Web Api Json序列化与反序列化
209 0
.NET MVC第九章、Web Api Json序列化与反序列化
|
JSON 数据格式
【.NET开发福音】使用Visual Studio将JSON格式数据自动转化为对应的类
【.NET开发福音】使用Visual Studio将JSON格式数据自动转化为对应的类
572 0
【.NET开发福音】使用Visual Studio将JSON格式数据自动转化为对应的类
|
JSON 前端开发 数据格式
.net MVC 使用 JSON JavaScriptSerializer 进行序列化或反序列化时出错,字符串的长度超过了为 maxJsonLength 属性设置的值
在.net mvc的controller中,方法返回JsonResult,一般我们这么写: [HttpPost] public JsonResult QueryFeature(string url, string whereClause) { string str=""; return Json(str); }   此时如果str过长,就会报“使用 JSON JavaScriptSerializer 进行序列化或反序列化时出错,字符串的长度超过了为 maxJsonLength 属性设置的值”。
2949 0
|
JSON 数据格式
将JSON字符串反序列化为指定的.NET对象类型
将JSON字符串反序列化为指定的.NET对象类型
171 0
|
JSON JavaScript API
.NET6东西--可写的JSON DOM API
.NET6东西--可写的JSON DOM API
285 0
|
JSON .NET 数据格式
2.1命令行和JSON的配置「深入浅出ASP.NET Core系列」
原文:2.1命令行和JSON的配置「深入浅出ASP.NET Core系列」 希望给你3-5分钟的碎片化学习,可能是坐地铁、等公交,积少成多,水滴石穿,谢谢关注。 命令行配置  1.新建控制台项目  2.
1164 0
|
JSON .NET 数据格式
2.1命令行和JSON的配置「深入浅出ASP.NET Core系列」
希望给你3-5分钟的碎片化学习,可能是坐地铁、等公交,积少成多,水滴石穿,谢谢关注。 命令行配置  1.新建控制台项目  2.nuget引入microsoft.aspnetcore.all  这里要注意版本号必须和dotnetcore兼容 3.
813 0