Gson将很乐意使用List制作JSON<;配对<;字符串,字符串>&燃气轮机;但如果列表在类中,则不会

Gson将很乐意使用List制作JSON<;配对<;字符串,字符串>&燃气轮机;但如果列表在类中,则不会,json,gson,Json,Gson,和前面的许多人一样,我需要制作一个键、值对的“表”。其中可能有多个,我不需要排序。成对列表似乎是一个不错的选择,但现在我无法让GSon为包含它们的类正确创建JSON 我可以寻找其他方法,但现在我的好奇心被激发了 为列表 但是当列表是一个类的成员时,它就不那么重要了 class Thing { private List<Pair<String, String>> pairs = new ArrayList<>(); private String

和前面的许多人一样,我需要制作一个键、值对的“表”。其中可能有多个,我不需要排序。成对列表似乎是一个不错的选择,但现在我无法让GSon为包含它们的类正确创建JSON

我可以寻找其他方法,但现在我的好奇心被激发了

列表

但是当
列表
是一个类的成员时,它就不那么重要了

class Thing {
    private List<Pair<String, String>> pairs = new ArrayList<>();
    private String thingName = "Benjamin Jacob Grimm";

    Thing() {
        pairs.add(new ImmutablePair<>("One", "1"));
        pairs.add(new MutablePair<>("Two", "1"));
        pairs.add(new ImmutablePair<>("Two", "2"));
    }
}

@Test
void thingTest() {
    Thing thing = new Thing();
    String json = new GsonBuilder().setPrettyPrinting().create().toJson(thing);
    System.out.println(json);
}

同样,我可以寻找另一种存储机制,但我肯定很好奇这里出了什么问题。有人有什么想法吗?

尝试为
toJson
提供
TypeToken
,比如:

Type type = new TypeToken<Pair<String, String>>() {}.getType();

String json = new GsonBuilder().setPrettyPrinting().create().toJson(pairs, type);
System.out.println(json);
Type Type=new-TypeToken(){}.getType();
字符串json=new GsonBuilder().setPrettyPrinting().create().toJson(成对,类型);
System.out.println(json);


没有测试:)

好吧。。我已经在其他SO响应中看到了这一点,但我的问题不在于
对象本身。请注意,在第一个示例中,对象JSON的格式非常好。问题是当
List
对象是类的成员时。我认为这可能是类型擦除和列表的问题。我甚至怀疑比我聪明的人能解释为什么这是意料之中的和恰当的。我希望他们会;-)仍然希望。。。
class Thing {
    private List<Pair<String, String>> pairs = new ArrayList<>();
    private String thingName = "Benjamin Jacob Grimm";

    Thing() {
        pairs.add(new ImmutablePair<>("One", "1"));
        pairs.add(new MutablePair<>("Two", "1"));
        pairs.add(new ImmutablePair<>("Two", "2"));
    }
}

@Test
void thingTest() {
    Thing thing = new Thing();
    String json = new GsonBuilder().setPrettyPrinting().create().toJson(thing);
    System.out.println(json);
}
{
  "pairs": [
       {},
       {},
       {}
  ],
  "thingName": "Benjamin Jacob Grimm"
}
Type type = new TypeToken<Pair<String, String>>() {}.getType();

String json = new GsonBuilder().setPrettyPrinting().create().toJson(pairs, type);
System.out.println(json);