Gson——Set的映射

原文链接:Gson — Mapping of Sets

作者:Norman Peitek

翻译:签到钱就到

前面的两篇博客,我们展示了如何用Gson映射List数据Java Map。本文中,你将要学习如何序列化(反序列化)Java集合(Set)。

当然,这不是我们Gson系列里唯一的一篇文章,如果你对其他的主题感兴趣,可以看一下我们的大纲:

Gson系列概览

  1. 用java-JSON实现序列化合反序列化
  2. 嵌套对象的映射
  3. 数组和列表对象的映射
  4. Map的映射
  5. Set的映射
  6. 空值的映射
  7. Gson Model Annotations — How to Ignore Fields with @Expose
  8. Gson Model Annotations — How to Change the Naming of Fields with @SerializedName
  9. Gson Builder — Basics & Naming Policies
  10. Gson Builder — Force Serialization of null Values
  11. Gson Builder — Exclusion Strategies
  12. Gson Builder — Relax Gson with Lenient
  13. Gson Builder — Special Values of Floats & Doubles
  14. Gson Builder — Model Versioning
  15. Gson Builder — Formatting of Dates & Custom Date/Time Mapping
  16. Gson Builder — Pretty Printing
  17. Gson Builder — HTML Escaping

Java Set的序列化

Java的集合框架里包含了多种数据类型。我们已经学习了List和Map,它们在JSON的表现形式上有点差异。这周,我们会研究一下集合。一个HashSet是一个非常好的方式确保你的数据集合的唯一性。由于集合有存在的理由,且在真实世界里广泛使用,Gson也应当能处理他们。

让我们回顾一下已有的场景,你的应用有些特性,许多用户可以加入组成一个团队。当然,每个用户只能加入一次,这样,我们使用一个HashSet去保存用户的姓名。

我们用Java实现,我们可能写出下面的代码:

HashSet users = new HashSet<>();  
users.add("Christian");  
users.add("Marcus");  
users.add("Norman");  
users.add("Marcus"); // would not be added again  

集合的序列化与其他类型一样,你可以直接抛给Gson去处理,它会返回正确的结果:

Gson gson = new Gson();  
String usersJson = gson.toJson(users);  

结果如下:

[
  "Marcus",
  "Christian",
  "Norman"
]

正如你所见,集合的JSON展示是跟列表一样的。是的,Java内部处理方式不一样,但更高层次,他们都是以一样的数据存储。对于像JSON一样技术无关的标记法,内部细节并不重要。

Java Set的反序列化

正如我们前面提到的,JSON对于Set的实现与List是一样的。因此,Gson也乐于将一个有效的JSON转换为java数据类型。记得我们在列表/数组那篇博客里的flowerCount的例子么?因为我们可以对于任何一个使用JSON,看看代码:

[
    {
      "name": "Christian",
      "flowerCount": 1
    },
    {
      "name": "Marcus",
      "flowerCount": 3
    },
    {
      "name": "Norman",
      "flowerCount": 2
    }
]

我们处理Set序列化的方式与List是一样的。我们为Gson创建一个Type,然后让它施展魔力:

String founderJson = "[{'name': 'Christian','flowerCount': 1}, {'name': 'Marcus', 'flowerCount': 3}, {'name': 'Norman', 'flowerCount': 2}]";

Gson gson = new Gson();

Type founderSetType = new TypeToken>(){}.getType();

HashSet founderSet = gson.fromJson(founderJson, founderSetType);
Gson——Set的映射_第1张图片

展望

在这篇文章里你看到了如何对java Set进行序列化和反序列化。你知道在JSON上下文中,他们与列表其实都一样。现在我们已经探索了所有主要的数据类型,接下来将研究Gson的一些通用配置选项。

如果你需要反馈或有疑问,在评论中让我们知道或twitter @futurestud_io。

你可能感兴趣的:(Gson——Set的映射)