【问题标题】:Java Serialization with YAML (SnakeYaml Library), HashMaps are not shown in serialized output使用 YAML(SnakeYaml 库)进行 Java 序列化,HashMap 未显示在序列化输出中
【发布时间】:2011-12-13 16:35:20
【问题描述】:

当我序列化一个类对象时:

class MyClass{

   String value;
   public MyClass(){}

   public void setValue(String value){
      this.value = value;
   }

   public String getValue(){
      return value;
   }

}

并像这样序列化它:

 MyClass c1 = new MyClass();
    c1.setValue("this is a value");
    Map<String, Object> result = new HashMap<String, Object>();

    result.put("MyClass", c1);
    Yaml yaml = new Yaml();
    String output = yaml.dump(result);

工作得很好。但是,现在如果在我的课堂上我有另一个值:

class MyClass{

   String value;
   Map<Integer, AnotherClass> MyList
   public MyClass(){}

   public void setValue(String value){
      this.value = value;
   }

   Map<Integer, AnotherClass> CList = new HashMap<Integer, AnotherClass>();
   public void setList(AnotherClass AL){
      CList.put(1,AL);
      this.MyList = CList;
   }

   public String getValue(){
      return value;
   }

}

现在我重复一遍,程序可以工作,但在序列化输出中,我看不到这个 HashMap。有什么问题,是否有一些不同的方法用于序列化 HashMap 类型的对象?请建议....

【问题讨论】:

  • 请尝试成为SSCCE。它将帮助您更快地得到答案。
  • @edwardw 我不能再缩短它,否则没人会明白我想说什么

标签: java serialization hashmap yaml snakeyaml


【解决方案1】:

地图没有getter,这就是它被忽略的原因。

【讨论】:

  • 我没有在代码中显示,但我也有地图对象的 getter 和 setter。但它只是被忽略了,我不知道为什么?
  • 实际上,现在我使用其他自定义对象类型(例如简单的 AnotherClass 对象的 getter 和 setter)进行了测试,但结果是相同的。可能是 YAML 没有考虑到我猜的对象?
  • 获得答案的最有效方法是编写一个失败的 JUnit 测试并在 SnakeYAML 中创建一个问题:code.google.com/p/snakeyaml/issues/list
猜你喜欢
  • 2018-12-24
  • 1970-01-01
  • 1970-01-01
  • 2023-03-04
  • 2010-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
相关资源
最近更新 更多