<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # Gson – 排除或忽略字段 > 原文: [https://howtodoinjava.com/gson/gson-exclude-or-ignore-fields/](https://howtodoinjava.com/gson/gson-exclude-or-ignore-fields/) [Gson](https://howtodoinjava.com/learningpaths/gson/) 允許我們從 Java 類中排除或忽略字段,這些字段不希望包含在序列化和反序列化中。 Gson 支持許多內置機制,用于排除頂級類,字段和字段類型。 ## 1\. Gson `@Expose`注解 [`@Expose`](https://static.javadoc.io/com.google.code.gson/gson/2.8.5/com/google/gson/annotations/Expose.html)標記要排除的對象的某些字段,默認為*標記為*,以考慮將序列化和反序列化為 JSON。 這意味著 Gson 將排除類中沒有用`@Expose`注解標記的所有字段。 `@Expose`注解在一種編程風格中很有用,在該編程風格中,您要顯式指定應考慮進行序列化或反序列化的所有字段。 #### 1.1 如何使用`@Expose` `@Expose`是可選的,并提供兩個配置參數: * `serialize` – 如果*為真*,則在序列化時會在 JSON 中寫出帶有此注解的字段。 * `deserialize` – 如果*為真*,則從 JSON 反序列化帶有此注解的字段。 ```java @Expose(serialize = false) private String lastName; @Expose (serialize = false, deserialize = false) private String emailAddress; ``` #### 1.2 創建 Gson 實例 如果我們使用`new Gson()`創建 Gson 并執行`toJson()`和`fromJson()`方法,則`@Expose`將不會對序列化和反序列化產生任何影響。 要使用此注解,我們必須使用[`GsonBuilder`](https://howtodoinjava.com/gson/gson-gsonbuilder-configuration/)類及其`excludeFieldsWithoutExposeAnnotation()`方法創建`Gson`實例。 ```java Gson gson = new GsonBuilder() .excludeFieldsWithoutExposeAnnotation() .create(); ``` ## 2.排除帶有修飾符的字段 #### 2.1 瞬態字段 默認情況下,如果我們僅將字段標記為**瞬態**,則 Gson 會將字段從序列化和反序列化中排除。 請記住,它無法阻止單向轉換。 它同時阻止了兩者。 `transient`將具有與`@Expose (serialize = false, deserialize = false)`相同的效果。 ```java @Expose(serialize = false) private String lastName; private transient String emailAddress; ``` #### 2.2 其他修飾符 通過使用`GsonBuilder`的`excludeFieldsWithModifiers()`方法,我們可以排除具有某些公開修飾符的字段。 例如,我們要排除一個類的所有`static`成員,我們可以這樣創建 Gson 對象: ```java Gson gson = new GsonBuilder() .excludeFieldsWithModifiers(Modifier.STATIC) .create(); ``` 我們可以在“`excludeFieldsWithModifiers`”方法中使用任意數量的`Modifier`常量。 例如: ```java Gson gson = new GsonBuilder() .excludeFieldsWithModifiers(Modifier.STATIC, Modifier.TRANSIENT, Modifier.VOLATILE) .create(); ``` ## 3.排除策略 如果以上任何一種技術都不適合我們,那么我們可以創建自己的策略。 [`ExclusionStrategy`](https://static.javadoc.io/com.google.code.gson/gson/2.8.5/com/google/gson/ExclusionStrategy.html)用于確定是否應序列化或反序列化字段或頂級類作為 JSON 輸出/輸入的一部分。 * 對于**序列化**,如果`shouldSkipClass(Class)`或 `shouldSkipField(fieldAttributes)`方法返回`true`,則該類或字段類型將不屬于 JSON。 輸出。 * 對于**反序列化**,如果`shouldSkipClass(Class)`或`shouldSkipField(fieldAttributes)`方法返回`true`,則不會將其設置為 Java 對象結構的一部分 。 例如,在`ExclusionStrategy`定義下方將排除所有帶有`@Hidden`注解的字段。 ```java //public @interface Hidden { // some implementation here //} // Excludes any field (or class) that is tagged with an "@Hidden" public class HiddenAnnotationExclusionStrategy implements ExclusionStrategy { public boolean shouldSkipClass(Class<?> clazz) { return clazz.getAnnotation(Hidden.class) != null; } public boolean shouldSkipField(FieldAttributes f) { return f.getAnnotation(Hidden.class) != null; } } ``` 要使用該排除策略,請在`GsonBuilder`對象中進行設置。 ```java GsonBuilder builder = new GsonBuilder(); builder.setExclusionStrategies( new HiddenAnnotationExclusionStrategy() ); Gson gson = builder.create(); ``` 如果上述機制都不能滿足我們的需求,那么我們始終可以使用*自定義序列化器和反序列化器*。 學習愉快!
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看