0

我将不同类型的对象作为参数获取到不同的服务 API 中。示例 API:

void API1(Object1 obj1);
void API2(Object2 obj2);

收到 API 后,我将对象转换为 JSON 类型并存储在指定位置。另一个轮询器轮询存储的位置并尝试使用Gson.

我能想到的一种方法是创建一个RequestWrapper包含所有类型的对象(例如 Object1、Object2 等)并在存储数据时填充正确的变量。

在接收端,我们可以将对象转换为 RequestWrapper 对象并检查填充的对象。

如您所见,这需要 20 多个变量的附加对象,其中大多数将为空。此外,在将其转换为正确类型时会进行多个 if-else 检查。

如果有的话,以面向对象的方式实现这一目标的最佳方法是什么?

4

1 回答 1

0

在基本层面上,似乎有两种方法可以获取来自客户端的序列化对象的数据类型。

  1. 让客户告诉你。
  2. 自己想办法。

我能想到的几种让客户告诉你的方法:

  1. 为每种不同的数据类型添加一个 API。

    void API1(Foo obj1);
    void API1(Bar obj2);
    void API2(Foo obj1);
    void API2(Bar obj2);
    
  2. 要求客户端将其包含在序列化形式中。

    {"class":"myPackage.MyClass"}
    

我能想到的几种方法可以自己解决:

  1. 为某些唯一标识符预解析 JSON 字符串(即在反序列化之前确定类型)。

    if (jsonString.contains("foo")) {
        Foo foo = gsonInstance.fromJson(jsonString, Foo.class);
    }
    
  2. 前面提到的包装器方式(即反序列化后确定类型)。

我不知道任何方法都是特别面向对象的,但是面向对象是如何开始序列化数据的呢?

于 2013-11-06T02:32:24.447 回答