2014-11-05 21 views
0

我想使用Gson序列化程序將通用Scala類的實例序列化爲Json。在序列化普通對象時工作正常,但序列化普通對象不行。下面的第一個測試成功,第二個失敗:使用Gson序列化通用Scala類型

序列化下面的變量myGeneric只是給出字符串「{」值「:{}}」,而不是測試中預期的內容。任何想法如何正確地做到這一點?

class MyGeneric[T](t : T) { 
    val value : T = t; 
} 

class Bla(v1: String) { 
    val value1 = v1 
} 

class GsonGenericTest extends FlatSpec with Matchers { 

    behavior of "Gson" 

    it should "be able to serialize plain objects" in { 
    val myObject = new Bla("value1") 
    new Gson().toJson(myObject) should be ("{\"value1\":\"value1\"}") 
    } 

    it should "be able to serialize generic objects" in { 
    val myGeneric = new MyGeneric[Bla](new Bla("value1")) 
    new Gson().toJson(myGeneric) should be ("{\"value\":{\"value1\":\"value1\"}}") 
    } 

} 

回答

0

我在這裏找到了答案:http://www.studytrails.com/java/json/java-google-json-serializing-classes-with-generic-type.jsp

這可以被轉換爲斯卡拉使測試情況如下工作:

class MyGeneric[T](t : T) { 
    val value : T = t; 
} 

class Bla(v1: String) { 
    val value1 = v1 
} 

class GsonGenericTest extends FlatSpec with Matchers { 

    behavior of "Gson" 

    it should "be able to serialize plain objects" in { 
    val myObject = new Bla("value1") 
    new Gson().toJson(myObject) should be ("{\"value1\":\"value1\"}") 
    } 

    it should "be able to serialize generic objects" in { 
    val myGeneric = new MyGeneric[Bla](new Bla("value1")) 
    val myGenericType : Type = new TypeToken[MyGeneric[Bla]]() { }.getType(); 
    val json = new Gson().toJson(myGeneric, myGenericType) 
    json should be ("{\"value\":{\"value1\":\"value1\"}}") 
    } 

}