Java Gson 源码分析说明


#Java Gson


架构

Gson 架构:

         Gson  
          🔽
      TypeAdapter
          🔽
JsonWriter / JsonReader

JsonElement 架构:

     JsonElement
          🔽
       Streams
          🔽
TypeAdapters.JSON_ELEMENT
          🔽
JsonWriter / JsonReader
          🔽
        String

源码结构

以 2.8.9 为例,源码结构如下:

src/main
├── java
│   ├── com
│   │   └── google
│   │       └── gson
│   │           ├── ExclusionStrategy.java
│   │           ├── FieldAttributes.java
│   │           ├── FieldNamingPolicy.java
│   │           ├── FieldNamingStrategy.java
│   │           ├── Gson.java
│   │           ├── GsonBuilder.java
│   │           ├── InstanceCreator.java
│   │           ├── JsonArray.java
│   │           ├── JsonDeserializationContext.java
│   │           ├── JsonDeserializer.java
│   │           ├── JsonElement.java
│   │           ├── JsonIOException.java
│   │           ├── JsonNull.java
│   │           ├── JsonObject.java
│   │           ├── JsonParseException.java
│   │           ├── JsonParser.java
│   │           ├── JsonPrimitive.java
│   │           ├── JsonSerializationContext.java
│   │           ├── JsonSerializer.java
│   │           ├── JsonStreamParser.java
│   │           ├── JsonSyntaxException.java
│   │           ├── LongSerializationPolicy.java
│   │           ├── ToNumberPolicy.java
│   │           ├── ToNumberStrategy.java
│   │           ├── TypeAdapter.java
│   │           ├── TypeAdapterFactory.java
│   │           ├── annotations
│   │           │   ├── Expose.java
│   │           │   ├── JsonAdapter.java
│   │           │   ├── SerializedName.java
│   │           │   ├── Since.java
│   │           │   ├── Until.java
│   │           │   └── package-info.java
│   │           ├── internal
│   │           │   ├── $Gson$Preconditions.java
│   │           │   ├── $Gson$Types.java
│   │           │   ├── ConstructorConstructor.java
│   │           │   ├── Excluder.java
│   │           │   ├── GsonBuildConfig.java
│   │           │   ├── JavaVersion.java
│   │           │   ├── JsonReaderInternalAccess.java
│   │           │   ├── LazilyParsedNumber.java
│   │           │   ├── LinkedHashTreeMap.java
│   │           │   ├── LinkedTreeMap.java
│   │           │   ├── ObjectConstructor.java
│   │           │   ├── PreJava9DateFormatProvider.java
│   │           │   ├── Primitives.java
│   │           │   ├── Streams.java
│   │           │   ├── UnsafeAllocator.java
│   │           │   ├── bind
│   │           │   │   ├── ArrayTypeAdapter.java
│   │           │   │   ├── CollectionTypeAdapterFactory.java
│   │           │   │   ├── DateTypeAdapter.java
│   │           │   │   ├── DefaultDateTypeAdapter.java
│   │           │   │   ├── JsonAdapterAnnotationTypeAdapterFactory.java
│   │           │   │   ├── JsonTreeReader.java
│   │           │   │   ├── JsonTreeWriter.java
│   │           │   │   ├── MapTypeAdapterFactory.java
│   │           │   │   ├── NumberTypeAdapter.java
│   │           │   │   ├── ObjectTypeAdapter.java
│   │           │   │   ├── ReflectiveTypeAdapterFactory.java
│   │           │   │   ├── TreeTypeAdapter.java
│   │           │   │   ├── TypeAdapterRuntimeTypeWrapper.java
│   │           │   │   ├── TypeAdapters.java
│   │           │   │   └── util
│   │           │   │       └── ISO8601Utils.java
│   │           │   ├── package-info.java
│   │           │   ├── reflect
│   │           │   │   ├── PreJava9ReflectionAccessor.java
│   │           │   │   ├── ReflectionAccessor.java
│   │           │   │   └── UnsafeReflectionAccessor.java
│   │           │   └── sql
│   │           │       ├── SqlDateTypeAdapter.java
│   │           │       ├── SqlTimeTypeAdapter.java
│   │           │       ├── SqlTimestampTypeAdapter.java
│   │           │       └── SqlTypesSupport.java
│   │           ├── package-info.java
│   │           ├── reflect
│   │           │   ├── TypeToken.java
│   │           │   └── package-info.java
│   │           └── stream
│   │               ├── JsonReader.java
│   │               ├── JsonScope.java
│   │               ├── JsonToken.java
│   │               ├── JsonWriter.java
│   │               └── MalformedJsonException.java
│   └── module-info.java
└── resources
    └── META-INF
        └── MANIFEST.MF

接口 com.google.gson.TypeAdapterFactory

TypeAdapter 工厂,用于生成 TypeAdapter 类。

抽象类 com.google.gson.TypeAdapter

类型适配器,用于 JSON 的序列化和反序列化。

有多种实现,不同形式的 JSON ,会对应不同的 TypeAdapter ,也可以自定义。



( 本文完 )