0

私がこれを行う場合:

public static volatile ArrayList<Process> processes = new ArrayList<Process>(){
    {
        add(new Process("News Workflow", "This is the workflow for the news segment", "image"));
    }
};

そしてこれ:

String jsonResponse = gson.toJson(processes);

jsonResponseがnullです。

しかし、私がこれを行う場合:

public static volatile ArrayList<Process> processes = new ArrayList<Process>();
processes.add(new Process("nam", "description", "image"));
String jsonResponse = gson.toJson(processes);

Jsonの応答は次のとおりです。

[{"name":"nam","description":"description","image":"image"}]

何故ですか?

4

1 に答える 1

2

Gsonの何が問題なのかわかりませんが、ここでArrayListのサブクラスを作成していることを知っていますか?

new ArrayList<Process>(){
    {
        add(new Process("News Workflow", "This is the workflow for the news segment", "image"));
    }
};

あなたはそれをチェックすることができます

System.out.println( processes.getClass().getName() );

印刷されませんjava.util.ArrayList

静的初期化を次のように使用したいと思います

public static volatile ArrayList<Process> processes = new ArrayList<Process>();
static {
    processes.add( new Process( "News Workflow", "This is the workflow for the news segment", "image" ) );
};

匿名クラスに問題があるようですが、同じ問題がここにあります

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

public class GSonAnonymTest {

    interface Holder {
        String get();
    }

    static Holder h = new Holder() {
        String s = "value";

        @Override
        public String get() {
            return s;
        }
    };

    public static void main( final String[] args ) {
        final GsonBuilder gb = new GsonBuilder();
        final Gson gson = gb.create();

        System.out.println( "h:" + gson.toJson( h ) );
        System.out.println( h.get() );
    }

}

UPD: Gsonユーザーガイド-オブジェクトを使用したより細かいポイント、最後のポイント「...匿名クラス、およびローカルクラスは無視され、シリアル化または逆シリアル化に含まれません...」を参照してください。

于 2012-04-24T12:18:12.120 に答える