![](/img/trans.png)
[英]How can I serialize a nested object using Gson @SerializedName in Java?
[英]How to use @SerializedName alternate field in GSON to deserialize nested object?
在反序列化中,我嘗試使用GSON將不同的JSON節點映射到單個字段。
我在課程中有下一個領域:
private List<MyObjects> pages;
傳入的json可能是:
{
"pages": [
{
"pageNumber": "1"
}
]
}
要么
{
"pages": {
"list": [
{
"pageNumber": "1"
}
]
}
}
我正在嘗試使用此方法將頁面數組映射到頁面類字段:
@SerializedName(value = "pages", alternate = "pages.list")
public List<MyObjects> pages;
但它不起作用。
似乎GSON不支持此功能。 但是也許有人知道為什么嗎?
提出問題
如何在GSON中使用備用字段?
答案在於我在這里部分復制的文檔(也許您已經知道全部或部分內容)。
提出問題
看來GSON不支持這一點。 但是也許有人知道為什么嗎?
是的,也許某些Gson設計師可以回答這個問題。 就我個人JSONPath
在該注釋屬性中,我看不出它不支持JSONPath
任何原因。 無論如何,我將集中討論標題中的問題。
這不是@SerializedName.alternate
現在的工作方式。 如果您查看Gson API規范 :
公共抽象String []替代
返回:反序列化字段時的備用名稱
(因此,名稱不是路徑)
這是一個如何使用此注釋的示例:
public class MyClass { @SerializedName("name") String a; @SerializedName(value="name1", alternate={"name2", "name3"}) String b;
和
反序列化時,注釋中指定的所有值都將反序列化到字段中。 例如:
MyClass target = gson.fromJson("{'name1':'v1'}", MyClass.class); assertEquals("v1", target.b); target = gson.fromJson("{'name2':'v2'}", MyClass.class); assertEquals("v2", target.b); target = gson.fromJson("{'name3':'v3'}", MyClass.class); assertEquals("v3", target.b);
換句話說,在反序列化時,它只是將要反序列化的名稱不同的字段映射到一個相同的字段。 它不映射Json
源中備用路徑中的字段。 不過,這可能是一個不錯的功能。
因此,在API文檔示例中,所有名稱為[“ name1”,“ name2”,“ name3”]的字段都將反序列化為MyClass
字段b
。 據我了解,它沒有做的是將任何嵌套的Json對象反序列化到該帶注釋的字段。
目前,這兩個pages
字段對於Gson而言似乎是不同的對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.