1

protostuff を標準の Jackson シリアライザーのように動作させる最も簡単な方法は何ですか?

オブジェクト グラフ、リスト、または配列をルート オブジェクトとしてシリアル化できるようにしたかったのですが、これに対する回避策すらないようです。

ここに — oString、SomeType、List[T] などのオブジェクトがあります...

JsonIOUtil.writeTo(stream,
                   o,
                   RuntimeSchema.getSchema((Class<Object>) o.getClass()),
                   false,
                   LinkedBuffer.allocate());
4

1 に答える 1

0

JSON は主要なシリアライゼーション タイプではなく、protostuff でサポートされています。もともとは protobuf をサポートするために作成されたもので、いくつかの拡張機能 (オブジェクト グラフ) が含まれています。JSON シリアライゼーションは、「サポートされている」シリアライゼーション形式として後で追加されました。そのため、Jackson JSON や GSON などの一般的な JSON サポート ライブラリには存在しない制限がいくつかあります。

Protostuff は、一連のキーと値のペア (フィールド) を持つ構造の抽象化である「メッセージ」をシリアライズ/デシリアライズできます。フィールドは、プリミティブ (整数、文字列など)、その他のメッセージ、または配列にすることができます。ただし、配列を直接シリアル化する方法はありません。常に「メッセージ」が必要です。

次のようにラッパー クラスを定義できます。

class Event {
    public Object data;
}

このラッパー クラスを使用すると、"data" を List/array を含む任意の型に設定できます。

2016 年 10 月 4 日更新:

protostuff の JSON シリアル化形式は、循環参照をサポートしていません。オブジェクト グラフをシリアル化するには、独自のバイナリ形式を使用する GraphIOUtil を使用する必要があります。

于 2016-10-01T23:19:10.793 に答える