4

生成されたjson出力にシリアル化されたオブジェクトのタイプを常に追加するようにjacksonを構成することは可能ですか?

例えば:

package org.acme;

class ClassA
{
    String a;
    String b;
}

生成されたjsonを次のようにします:["org.acme.ClassA"、{"a": "str1"、 "b": "str2"}]

4

2 に答える 2

2

Jackson から自由に変更でき、表示されている形式と一致する形式を特に必要としない場合は、Genson http://code.google.com/p/gensonを試すことができます。

たとえば、シリアル化したオブジェクトの元の型に基づいてインターフェイスまたは抽象クラスを逆シリアル化できるようにする必要がある場合は、次のようにします。

interface Entity {}
static class Person implements Entity {}

Genson genson = new Genson.Builder().setWithClassMetadata(true).create();
// json will be equal to {"@class":"my.package.Person"}
String json = genson.serialize(new Person());

// and now Genson is able to deserialize it back to Person using the information 
// in the Json Object
Person person = (Person) genson.deserialize(json, Entity.class);

もう 1 つの優れた機能は、クラスのエイリアスを定義する機能です。これにより、json ストリームに表示される情報が少なくなりますが、既存の json ストリームを気にせずにリファクタリングを行うこともできます (たとえば、データベースに保存する場合)。

Genson genson = new Genson.Builder().addAlias("person", Person.class).create();
// json value is {"@class": "person"}
String json = genson.serialize(new Person());

ウィキを見てください。

于 2012-10-02T15:23:34.087 に答える