String 类的 Gson 自定义反序列化器

我正在使用 GSON 将 json 转换为 POJO,但 json 中的键值可能包含空格,我想修剪它们。为此,我编写了一个自定义字符串反序列化器,但这不起作用。这是我想要的:


public class Foo {

  public int intValue;

  public String stringValue;


  @Override

  public String toString() {

      return "**" + stringValue + "**" ;

  }

}


public void testgson()

{

    String json = "{\"intValue\":1,\"stringValue\":\" one two  \"}";

    GsonBuilder gsonBuilder = new GsonBuilder();

    gsonBuilder.registerTypeAdapter(String.class, new StringDeserializer());

    Gson gson = gsonBuilder.create();

    Foo a = gson.fromJson(json, Foo.class);

    System.out.println(a.toString()); //prints ** one two ** instead of **one two**


}


class StringDeserializer implements JsonDeserializer<String>

{

    @Override public String deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)

        throws JsonParseException

    {

        String a = json.toString().trim();

        System.out.print(a); //prints ** one two **

        return a;

    }

}

我期望输出是这样**one two**,但事实并非如此。我究竟做错了什么


牧羊人nacy
浏览 104回答 1
1回答

青春有我

在你的StringDeserializer,这个json.toString()正在调用toStringa JsonElement,特别是JsonPrimitive包含文本值的 a 。它的toString实现返回其内容的 JSON 表示形式,从字面上看就是 String " one two  "。trim没有执行您想要的操作,因为该 String 包含在".您真正想做的是读取 JSON 元素的内容。您可以使用其中一种JsonElement方便的方法来做到这一点:getAsString()。所以String a = json.getAsString().trim();然后会打印你所期望的内容。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java