⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gson.java

📁 地图生成的一个文件
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* * Copyright (C) 2008 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package com.google.gson;import java.io.IOException;import java.io.Reader;import java.io.StringReader;import java.io.StringWriter;import java.io.Writer;import java.lang.reflect.Modifier;import java.lang.reflect.Type;import java.util.LinkedList;import java.util.List;import java.util.Map;/** * This is the main class for using Gson. Gson is typically used by first constructing a * Gson instance and then invoking {@link #toJson(Object)} or {@link #fromJson(String, Class)} * methods on it. * * <p>You can create a Gson instance by invoking {@code new Gson()} if the default configuration * is all you need. You can also use {@link GsonBuilder} to build a Gson instance with various * configuration options such as versioning support, pretty printing, custom * {@link JsonSerializer}s, {@link JsonDeserializer}s, and {@link InstanceCreator}s.</p> * * <p>Here is an example of how Gson is used for a simple Class: * * <pre> * Gson gson = new Gson(); // Or use new GsonBuilder().create(); * MyType target = new MyType(); * String json = gson.toJson(target); // serializes target to Json * MyType target2 = gson.fromJson(json, MyType.class); // deserializes json into target2 * </pre></p> * * <p>If the object that your are serializing/deserializing is a {@code ParameterizedType} * (i.e. contains at least one type parameter and may be an array) then you must use the * {@link #toJson(Object, Type)} or {@link #fromJson(String, Type)} method.  Here is an * example for serializing and deserialing a {@code ParameterizedType}: * * <pre> * Type listType = new TypeToken<List<String>>() {}.getType(); * List<String> target = new LinkedList<String>(); * target.add("blah"); * * Gson gson = new Gson(); * String json = gson.toJson(target, listType); * List<String> target2 = gson.fromJson(json, listType); * </pre></p> * * <p>See the <a href="https://sites.google.com/site/gson/gson-user-guide">Gson User Guide</a> * for a more complete set of examples.</p> * * @see com.google.gson.reflect.TypeToken * * @author Inderjeet Singh * @author Joel Leitch */public final class Gson {  //TODO(inder): get rid of all the registerXXX methods and take all such parameters in the  // constructor instead. At the minimum, mark those methods private.  private static final String NULL_STRING = "null";  static final boolean DEFAULT_JSON_NON_EXECUTABLE = false;    // Default instances of plug-ins  static final ModifierBasedExclusionStrategy DEFAULT_MODIFIER_BASED_EXCLUSION_STRATEGY =      new ModifierBasedExclusionStrategy(true, new int[] { Modifier.TRANSIENT, Modifier.STATIC });  static final JsonFormatter DEFAULT_JSON_FORMATTER = new JsonCompactFormatter();  static final FieldNamingStrategy DEFAULT_NAMING_POLICY =      new SerializedNameAnnotationInterceptingNamingPolicy(new JavaFieldNamingPolicy());  private static final String JSON_NON_EXECUTABLE_PREFIX = ")]}'\n";  private final ExclusionStrategy strategy;  private final FieldNamingStrategy fieldNamingPolicy;  private final MappedObjectConstructor objectConstructor;  /** Map containing Type or Class objects as keys */  private final ParameterizedTypeHandlerMap<JsonSerializer<?>> serializers;  /** Map containing Type or Class objects as keys */  private final ParameterizedTypeHandlerMap<JsonDeserializer<?>> deserializers;  private final JsonFormatter formatter;  private final boolean serializeNulls;  private final boolean generateNonExecutableJson;  /**   * Constructs a Gson object with default configuration. The default configuration has the   * following settings:   * <ul>   *   <li>The JSON generated by <code>toJson</code> methods is in compact representation. This   *   means that all the unneeded white-space is removed. You can change this behavior with   *   {@link GsonBuilder#setPrettyPrinting()}. </li>   *   <li>The generated JSON omits all the fields that are null. Note that nulls in arrays are   *   kept as is since an array is an ordered list. Moreover, if a field is not null, but its   *   generated JSON is empty, the field is kept. You can configure Gson to serialize null values   *   by setting {@link GsonBuilder#serializeNulls()}.</li>   *   <li>Gson provides default serialization and deserialization for Enums, {@link Map},   *   {@link java.net.URL}, {@link java.net.URI}, {@link java.util.Locale}, {@link java.util.Date},   *   {@link java.math.BigDecimal}, and {@link java.math.BigInteger} classes. If you would prefer   *   to change the default representation, you can do so by registering a type adapter through   *   {@link GsonBuilder#registerTypeAdapter(Type, Object)}. </li>   *   <li>The default Date format is same as {@link java.text.DateFormat#DEFAULT}. This format    *   ignores the millisecond portion of the date during serialization. You can change   *   this by invoking {@link GsonBuilder#setDateFormat(int)} or   *   {@link GsonBuilder#setDateFormat(String)}. </li>   *   <li>By default, Gson ignores the {@link com.google.gson.annotations.Expose} annotation.   *   You can enable Gson to serialize/deserialize only those fields marked with this annotation   *   through {@link GsonBuilder#excludeFieldsWithoutExposeAnnotation()}. </li>   *   <li>By default, Gson ignores the {@link com.google.gson.annotations.Since} annotation. You   *   can enable Gson to use this annotation through {@link GsonBuilder#setVersion(double)}.</li>   *   <li>The default field naming policy for the output Json is same as in Java. So, a Java class   *   field <code>versionNumber</code> will be output as <code>&quot;versionNumber@quot;</code> in   *   Json. The same rules are applied for mapping incoming Json to the Java classes. You can   *   change this policy through {@link GsonBuilder#setFieldNamingPolicy(FieldNamingPolicy)}.</li>   *   <li>By default, Gson excludes <code>transient</code> or <code>static</code> fields from   *   consideration for serialization and deserialization. You can change this behavior through   *   {@link GsonBuilder#excludeFieldsWithModifiers(int...)}.</li>   * </ul>   */  public Gson() {    this(createExclusionStrategy(VersionConstants.IGNORE_VERSIONS), DEFAULT_NAMING_POLICY);  }  /**   * Constructs a Gson object with the specified version and the mode of operation while   * encountering inner class references.   */  Gson(ExclusionStrategy strategy, FieldNamingStrategy fieldNamingPolicy) {    this(strategy, fieldNamingPolicy,         new MappedObjectConstructor(DefaultTypeAdapters.getDefaultInstanceCreators()),        DEFAULT_JSON_FORMATTER, false, DefaultTypeAdapters.getDefaultSerializers(),        DefaultTypeAdapters.getDefaultDeserializers(), DEFAULT_JSON_NON_EXECUTABLE);  }  Gson(ExclusionStrategy strategy, FieldNamingStrategy fieldNamingPolicy,       MappedObjectConstructor objectConstructor, JsonFormatter formatter, boolean serializeNulls,      ParameterizedTypeHandlerMap<JsonSerializer<?>> serializers,      ParameterizedTypeHandlerMap<JsonDeserializer<?>> deserializers,       boolean generateNonExecutableGson) {    this.strategy = strategy;    this.fieldNamingPolicy = fieldNamingPolicy;    this.objectConstructor = objectConstructor;    this.formatter = formatter;    this.serializeNulls = serializeNulls;    this.serializers = serializers;    this.deserializers = deserializers;    this.generateNonExecutableJson = generateNonExecutableGson;  }    private ObjectNavigatorFactory createDefaultObjectNavigatorFactory() {    return new ObjectNavigatorFactory(strategy, fieldNamingPolicy);  }  private static ExclusionStrategy createExclusionStrategy(double version) {    List<ExclusionStrategy> strategies = new LinkedList<ExclusionStrategy>();    strategies.add(new AnonymousAndLocalClassExclusionStrategy());    strategies.add(DEFAULT_MODIFIER_BASED_EXCLUSION_STRATEGY);    if (version != VersionConstants.IGNORE_VERSIONS) {      strategies.add(new VersionExclusionStrategy(version));    }    return new DisjunctionExclusionStrategy(strategies);  }  /**   * This method serializes the specified object into its equivalent Json representation.   * This method should be used when the specified object is not a generic type. This method uses   * {@link Class#getClass()} to get the type for the specified object, but the   * {@code getClass()} loses the generic type information because of the Type Erasure feature   * of Java. Note that this method works fine if the any of the object fields are of generic type,   * just the object itself should not be of a generic type. If the object is of generic type, use   * {@link #toJson(Object, Type)} instead. If you want to write out the object to a   * {@link Writer}, use {@link #toJson(Object, Appendable)} instead.   *   * @param src the object for which Json representation is to be created setting for Gson   * @return Json representation of {@code src}.   */  public String toJson(Object src) {    if (src == null) {      return serializeNulls ? NULL_STRING : "";    }    return toJson(src, src.getClass());  }  /**   * This method serializes the specified object, including those of generic types, into its   * equivalent Json representation. This method must be used if the specified object is a generic   * type. For non-generic objects, use {@link #toJson(Object)} instead. If you want to write out   * the object to a {@link Appendable}, use {@link #toJson(Object, Type, Appendable)} instead.   *   * @param src the object for which JSON representation is to be created   * @param typeOfSrc The specific genericized type of src. You can obtain   * this type by using the {@link com.google.gson.reflect.TypeToken} class. For example,   * to get the type for {@code Collection<Foo>}, you should use:   * <pre>   * Type typeOfSrc = new TypeToken&lt;Collection&lt;Foo&gt;&gt;(){}.getType();   * </pre>   * @return Json representation of {@code src}   */  public String toJson(Object src, Type typeOfSrc) {    StringWriter writer = new StringWriter();    toJson(src, typeOfSrc, writer);    return writer.toString();  }  /**   * This method serializes the specified object into its equivalent Json representation.   * This method should be used when the specified object is not a generic type. This method uses   * {@link Class#getClass()} to get the type for the specified object, but the

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -