2012-04-24 1 views
0

をhandligないGSON初期化静的リストに正しく

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"}] 

はなぜですか?

答えて

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 User Guide - Finer Points with Objects見て、最後のポイント "...匿名クラスとローカルクラスは無視され、シリアライゼーションまたはデシリアライゼーションには含まれません..."

関連する問題