New file |
| | |
| | | package com.hdl.linkpm.sdk.template;
|
| | |
|
| | | import androidx.annotation.NonNull;
|
| | |
|
| | | import com.google.gson.Gson;
|
| | | import com.google.gson.GsonBuilder;
|
| | | import com.google.gson.JsonArray;
|
| | | import com.google.gson.JsonDeserializationContext;
|
| | | import com.google.gson.JsonDeserializer;
|
| | | import com.google.gson.JsonElement;
|
| | | import com.google.gson.JsonParseException;
|
| | | import com.google.gson.JsonPrimitive;
|
| | | import com.google.gson.JsonSerializationContext;
|
| | | import com.google.gson.JsonSerializer;
|
| | | import com.google.gson.JsonSyntaxException;
|
| | | import com.google.gson.TypeAdapter;
|
| | | import com.google.gson.TypeAdapterFactory;
|
| | | import com.google.gson.reflect.TypeToken;
|
| | | import com.google.gson.stream.JsonReader;
|
| | | import com.google.gson.stream.JsonToken;
|
| | | import com.google.gson.stream.JsonWriter;
|
| | |
|
| | | import java.io.IOException;
|
| | | import java.lang.reflect.Type;
|
| | |
|
| | | /**
|
| | | * Created by Tong on 2021/11/10.
|
| | | */
|
| | | public class GsonUtils {
|
| | |
|
| | | private static Gson gson;
|
| | |
|
| | | public static <T> T copy(Object o, Class<T> type) {
|
| | | return copy(o, TypeToken.get(type));
|
| | | }
|
| | |
|
| | | public static <T> T copy(Object o, TypeToken<T> type) {
|
| | | return copy(o, type.getType());
|
| | | }
|
| | |
|
| | | public static <T> T copy(Object o, Type type) {
|
| | | try {
|
| | | Gson gson = getGson();
|
| | | return gson.fromJson(gson.toJson(o), type);
|
| | | } catch (Exception e) {
|
| | | e.printStackTrace();
|
| | | }
|
| | | return null;
|
| | | }
|
| | |
|
| | |
|
| | | public static <T> T fromJson(String json, Type type) {
|
| | | try {
|
| | | Gson gson = getGson();
|
| | | return gson.fromJson(json, type);
|
| | | } catch (Exception e) {
|
| | | e.printStackTrace();
|
| | | }
|
| | | return null;
|
| | | }
|
| | |
|
| | | public static <T> T fromJson(String json, Class<T> type) {
|
| | | try {
|
| | | Gson gson = getGson();
|
| | | return gson.fromJson(json, type);
|
| | | } catch (Exception e) {
|
| | | e.printStackTrace();
|
| | | }
|
| | | return null;
|
| | | }
|
| | |
|
| | | public static <T> T fromJson(String json) {
|
| | | try {
|
| | | Gson gson = getGson();
|
| | | return gson.fromJson(json, new TypeToken<T>() {
|
| | | }.getType());
|
| | | } catch (Exception e) {
|
| | | e.printStackTrace();
|
| | | }
|
| | | return null;
|
| | | }
|
| | |
|
| | |
|
| | | public static String toJson(Object object) {
|
| | | try {
|
| | | return getGson().toJson(object);
|
| | | } catch (Exception e) {
|
| | | e.printStackTrace();
|
| | | }
|
| | | return null;
|
| | | }
|
| | |
|
| | | public static JsonArray toJsonArray(Object object) {
|
| | | try {
|
| | | return GsonUtils.fromJson(GsonUtils.toJson(object), new TypeToken<JsonArray>() {
|
| | | }.getType());
|
| | | } catch (Exception e) {
|
| | | e.printStackTrace();
|
| | | }
|
| | | return null;
|
| | | }
|
| | |
|
| | |
|
| | | public static Type getType(@NonNull final Type rawType, @NonNull final Type... typeArguments) {
|
| | | return TypeToken.getParameterized(rawType, typeArguments).getType();
|
| | | }
|
| | |
|
| | |
|
| | | public static Gson getGson() {
|
| | | if (gson == null) {
|
| | | gson = new GsonBuilder()
|
| | | .disableHtmlEscaping()
|
| | | .registerTypeAdapterFactory(new NullStringToEmptyAdapterFactory())
|
| | | .registerTypeAdapter(String.class, new StringAdapter())
|
| | | .registerTypeAdapter(Integer.class, new IntegerDefaultAdapter())
|
| | | .registerTypeAdapter(Double.class, new DoubleDefaultAdapter())
|
| | | .registerTypeAdapter(Long.class, new LongDefaultAdapter())
|
| | | .create();
|
| | | }
|
| | | return gson;
|
| | | }
|
| | |
|
| | | private static class StringAdapter implements JsonSerializer<String>, JsonDeserializer<String> {
|
| | | @Override
|
| | | public String deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
|
| | | throws JsonParseException {
|
| | | if (json instanceof JsonPrimitive) {
|
| | | return json.getAsString();
|
| | | } else {
|
| | | return json.toString();
|
| | | }
|
| | | }
|
| | |
|
| | | @Override
|
| | | public JsonElement serialize(String src, Type typeOfSrc, JsonSerializationContext context) {
|
| | | return new JsonPrimitive(src);
|
| | | }
|
| | | }
|
| | |
|
| | |
|
| | | private static class IntegerDefaultAdapter implements JsonSerializer<Integer>, JsonDeserializer<Integer> {
|
| | | @Override
|
| | | public Integer deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
|
| | | throws JsonParseException {
|
| | | try {
|
| | | if (json.getAsString().equals("") || json.getAsString().equals("null")) {
|
| | | return 0;
|
| | | }
|
| | | } catch (Exception ignore) {
|
| | | }
|
| | | try {
|
| | | return json.getAsInt();
|
| | | } catch (NumberFormatException e) {
|
| | | throw new JsonSyntaxException(e);
|
| | | }
|
| | | }
|
| | |
|
| | | @Override
|
| | | public JsonElement serialize(Integer src, Type typeOfSrc, JsonSerializationContext context) {
|
| | | return new JsonPrimitive(src);
|
| | | }
|
| | | }
|
| | |
|
| | | private static class DoubleDefaultAdapter implements JsonSerializer<Double>, JsonDeserializer<Double> {
|
| | | @Override
|
| | | public Double deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
|
| | | try {
|
| | | if (json.getAsString().equals("") || json.getAsString().equals("null")) {
|
| | | return 0.00;
|
| | | }
|
| | | } catch (Exception ignore) {
|
| | | }
|
| | | try {
|
| | | return json.getAsDouble();
|
| | | } catch (NumberFormatException e) {
|
| | | throw new JsonSyntaxException(e);
|
| | | }
|
| | | }
|
| | |
|
| | | @Override
|
| | | public JsonElement serialize(Double src, Type typeOfSrc, JsonSerializationContext context) {
|
| | | return new JsonPrimitive(src);
|
| | | }
|
| | | }
|
| | |
|
| | | private static class LongDefaultAdapter implements JsonSerializer<Long>, JsonDeserializer<Long> {
|
| | | @Override
|
| | | public Long deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
|
| | | throws JsonParseException {
|
| | | try {
|
| | | if (json.getAsString().equals("") || json.getAsString().equals("null")) {
|
| | | return 0L;
|
| | | }
|
| | | } catch (Exception ignore) {
|
| | | }
|
| | | try {
|
| | | return json.getAsLong();
|
| | | } catch (NumberFormatException e) {
|
| | | throw new JsonSyntaxException(e);
|
| | | }
|
| | | }
|
| | |
|
| | | @Override
|
| | | public JsonElement serialize(Long src, Type typeOfSrc, JsonSerializationContext context) {
|
| | | return new JsonPrimitive(src);
|
| | | }
|
| | | }
|
| | |
|
| | | private static class NullStringToEmptyAdapterFactory implements TypeAdapterFactory {
|
| | |
|
| | | public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> type) {
|
| | | Class<T> rawType = (Class<T>) type.getRawType();
|
| | | if (rawType != String.class) {
|
| | | return null;
|
| | | }
|
| | | return (TypeAdapter<T>) new StringNullAdapter();
|
| | | }
|
| | | }
|
| | |
|
| | | public static class StringNullAdapter extends TypeAdapter<String> {
|
| | |
|
| | | @Override
|
| | | public String read(JsonReader reader) throws IOException {
|
| | | if (reader.peek() == JsonToken.NULL) {
|
| | | reader.nextNull();
|
| | | return "";
|
| | | }
|
| | | return reader.nextString();
|
| | | }
|
| | |
|
| | | @Override
|
| | | public void write(JsonWriter writer, String value) throws IOException {
|
| | | if (value == null) {
|
| | | writer.nullValue();
|
| | | return;
|
| | | }
|
| | | writer.value(value);
|
| | | }
|
| | |
|
| | | }
|
| | |
|
| | |
|
| | | }
|