2017-03-16 2 views
0

システムがJSONデータを逆シリアル化するときの処理順序を理解しようとしています。JSONをデシリアライズするだけの引数が設定されていますか?

POJOの作成時に引数が設定されていますか? または、さまざまなsetSomeArg(String someValu)メソッドの呼び出しによって引数が設定されていますか?

私は検索やGoogleで回答を見つけられません。 これについての洞察をお見逃しなく。これがすでに投稿されている投稿と重複している場合は、リンクが重複しているというだけではありません。ありがとう。

答えて

0

逆直列化プロセスはイントロスペクション/リフレクションを使用します。つまり、JSONで検出されたものと同じ属性をチェックし、クラス属性タイプに従って値を設定します(つまり、整数の場合)。

プロセスは再帰的です。したがって、POJOに他のPOJO属性がある場合、すべての属性が設定されるまで、JSONの値をオブジェクトとして解析しようとします。 私はあなたが使用しているライブラリを知らないが、Gensonは、例えば、次に

POJO myPojo = POJO.class.newInstance(); 

のように見えるように、イントロスペクション/リフレクションを通してそれを呼び出すために、属性なしのコンストラクタを求め、それがします同じような方法で各属性を設定します。

long value = Long.ParseLong(myJson.get('value')); 
// The example field is a long int 
Field f = POJO.getClass().getDeclaredField("aFieldName"); 
f.setLong(myPojo, value); 

あなたはより完全な例をしたい場合は、javadocのを見て:https://docs.oracle.com/javase/tutorial/reflect/member/fieldValues.html

+0

私はFasterXML.Jacksonライブラリを使用しています。私は上記を理解している、それは私が興味がある値の実際の設定です。属性をJSONの値に設定するだけで設定した属性か、その属性のPOJOで定義されているsetSomeMethod()を使用していますか? – Elijah

+0

あなたのコメントに一致するように回答しました。 "setLong(objectConcerned、value)"は、私が思うに、あなたが探しているメソッドです。 – yanneke

+0

同じページにあるので、JSONをpojoに直列化解除すると、pojo属性はsetSomeArg(String someValu)メソッドによって設定されていますが、これは常にそうです。 – Elijah

関連する問題