簡體   English   中英

如何在GSON中使用@SerializedName備用字段反序列化嵌套對象?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM