当前位置: 首页 > 知识库问答 >
问题:

基于类反序列化json时发生异常,类内部有接口类型

薄瑞
2023-03-14

我得到了json文件和第三方类:Dealer和接口IDealerAttributes(我不能更改它们中的任何一个);(我删除包名并导入以使代码简单)


    JSON file
    {
      "serviceURL": "com.mycompany.serviceURL",
      "dealerAttributes": [
        {
          "language": "language0",
          "dealerAttributeName": "dealerAttributeName0",
          "updateDate": 0
        },
        {
          "language": "language1",
          "dealerAttributeName": "dealerAttributeName1",
          "updateDate": 1
        }
      ]
    }

    class Dealer {
        private String serviceURL;
        private List dealerAttributes;

        public Dealer() {
            dealerAttributes = new ArrayList();
        }

        //Getters and Setters...
    }

    public interface IDealerAttributes {
        public String getLanguage();
        public String getDealerAttributeName();
        public long getUpdateDate();
    }

一旦我使用:


gson.fromJson(jsonObj.toString(), Dealer.class);

我将从这一行得到异常:

Exception unmarshalling json String into Object: com.google.gson.JsonParseException: The JsonDeserializer com.google.gson.DefaultTypeAdapters$CollectionTypeAdapter@60e26ffd failed to deserialize json object [{"language":"language0","dealerAttributeName":"dealerAttributeName0","updateDate":0},{"language":"language1","dealerAttributeName":"dealerAttributeName1","updateDate":1}] given the type java.util.List

我如何读取这个基于Dealer.class、IdeAlerAttributes的json文件?

但我可以添加一个类,假设:


    public class DealerAttributes implements IDealerAttributes {
        private String language;
        private String dealerAttributeName;
        private long updateDate;

        public DealerAttributes() { 
        }

        //Getters and Setters...
    }

因为我是JSON/GSON的新手,你能给我详细的指导来帮助我吗?多谢了。

[添加]考虑一下Dealer类中是否有100个字段,并且Dealer中使用/嵌套了另外100个接口。我在想是不是有人有使用这种方式的经验:(MyType是接口)

gson.registerTypeAdapter(MyType.class, new MyType());`

共有1个答案

段干靖
2023-03-14

您可以将其映射到一个映射列表,然后使用BeanMapper(如http://code.google.com/p/orika/)获取更多信息的错误消息

 类似资料:
  • 我在ASP. net中编写了一个endpoint(应该会返回一个漂亮的JSON),下面的错误让我困惑,因为通过我的Swagger界面,一切正常,但是如果我在浏览器中直接调用endpoint,http://localhost:63291/api/AutoUpload/我收到: 出现内部异常:类型 这看起来很奇怪,因为我认为我确实实现了一个无参数(默认)构造函数。我的代码如下 上述代码使用以下数据传输

  • 我正在将RedditAPI中的一些内容反序列化到POJO中。我的目标是尽可能简化代码,因为reddit中实体之间的JSON结构通常是相同的。 例如,反序列化链接对象的JSON如下所示: 我可以反序列化这一点没有问题,但由于reddit注释的不同之处在于其类型为t1,并且在其下方的数据对象中具有不同的结构,因此我希望将相同的类结构重新用于JSON包装,而不必创建多个具有一行或两行差异的复制类。 我创

  • 我有两个类和,它们都有公共getter和构造函数,在构造函数参数上用和标记。当提供正确的json时,这两个类都被正确反序列化。但是,当我提供一个json(类类型a的投影)并尝试将其反序列化为B类型对象时,我希望会抛出一个异常。结果是,jackson将json正确反序列化为B类型对象,但这个对象只是空的。这是默认的行为吗?我的是使用创建的。我可以以任何方式配置它,使它在描述的情况下抛出异常吗? A类

  • 下面是我想与Jackson反序列化的JSON示例。 这里反序列化的棘手之处是联系人节点。需要注意的事情: contacts是一种多态抽象类型(参见下面的POJOs) 目标POJO: 注意:外部需求要求我使用抽象联系人类型。我宁愿直接反序列化到这些POJO,而不是让联系人类型挂起的中间POJO在另一个步骤中手动映射/转换到我的列表。 我已经查看了许多其他杰克逊多态反序列化问题,但似乎没有一个能处理这

  • 主要内容:嵌套内部类示例,嵌套的静态内部类示例在本章中,我们将解释具有内部类的类的序列化/反序列化。 嵌套内部类示例 参考以下示例代码片段 - 示例 让我们来看看一个内部类的序列化/反序列化。 创建一个名为的Java类文件:GsonTester.java - 执行上面示例代码,得到以下结果 - 嵌套的静态内部类示例 参考以下代码实现 - 示例 我们来看一个实例,其中包含一个静态内部类的序列化/反序列化。 创建一个名为的Java类文件:Gson

  • 问题内容: 我想对自己的自定义类进行JSON序列化。我正在使用Objective-C / iOS5。我想要执行以下操作: 看来NSJSONSerialization(和其他几个库)要求’person’类基于NSDictionary等。我想要一些可以序列化我想要定义的自定义对象的对象(在合理范围内)。 假设Person.h看起来像这样: 我希望为实例生成的JSON与以下内容相似: 我的应用程序使用A