使用自定义 typeadapter 添加对象,在 gson 中使用 jsonwriter
gson是一个很棒的库 - 它运行良好。有时我有自定义要求,可以制作和注册TypeAdapters和TypeAdaptorFactories - 这也很好。
然而,让我感到困惑的是如何委托回json序列化...大多数时候,我需要这个集合,但为了说明这一点 - 假设我有一个对类,gson显然会愉快地序列化,但由于某种原因,我需要自己的自定义序列化程序。井。。。如果我的对是
public class Pair
{
public final Object First;
public final Object Second;
public Pair( Object first, Object second) {this.first = first; this.second = second};
}
如果我为此编写了一个类型适配器 - 你会希望写入函数看起来像这样:
public void write( JsonWriter out, Pair pair )
{
out.beginObject();
out.name( "first");
out.value( pair.first ); // can't do this
out.name( "second");
out.value( pair.second); // or this
out.endObject();
}
所以你可以看到问题 - 我不知道第一和第二的类型,也不知道它们是如何序列化的。我可以使用gson.toJson来序列化第一个和第二个 - 但是如果我将它们作为字符串添加到编写器中,它们将被转义。有一个gson.tojson函数,它接受一个值和一个编写器 - 但它也需要一个打字标记 - 我没有。我有点印象,我打算从某个地方拥有另一种类型适配器 - 但是当我只是有一个对象列表时......我在哪里得到的?我只是为对象获取适配器吗?
我有点困惑?当然,这是最常见的用例吗?大多数自定义序列化程序将用于一个奇怪的T列表或T树或其他东西,你真的不知道列表中有什么,除了它从T继承...所以你需要能够以某种方式委托回序列化?
无论如何 - 如果有人能告诉我如何编写上述函数,我将不胜感激!