【问题标题】:gson de-serialization to string in javajava中的gson反序列化为字符串
【发布时间】:2012-11-16 12:55:00
【问题描述】:

在我的项目中,我使用的是 gson。当我想将我的类中的 json 子对象反序列化为字符串时遇到问题 例如

Class X
{
    Object1 x1 // expected json -> '{"param1": "pvalue", "param2":"pvalue"}'
    Object2 x2 //expected json -> '{"param1": "pvalue", "param2":"pvalue"}'
    String x3 //expected json ->'{"param1": "pvalue", "param2":"pvalue"}'
}

Gson 无法反序列化 x3,因为它的内容是 json 对象,但我需要它作为字符串而不是 Java 对象。 X 级 { Object1 x1 // 预期的 json -> '{"param1": "pvalue", "param2":"pvalue"}' Object2 x2 //预期的 json -> '{"param1": "pvalue", "param2":"pvalue"}' String x3 //预期的 json ->'{"param1": "pvalue", "param2":"pvalue"}' } 如何将 x3 的内容保存为字符串而不是对象。
谢谢

【问题讨论】:

  • 你在 s3 中期望什么字符串值?

标签: java android serialization gson


【解决方案1】:

您可以尝试为 String 注册一个自定义的 TypeAdapter 并修复它。

GsonBuilder gson = new GsonBuilder();
gson.registerTypeAdapter(String.class, new MyTypeAdapter());

Gson gson = gsonBuilder.create();
....

Javadoc User Guide

【讨论】:

  • 感谢您的回答,请您详细说明如何操作,谢谢
【解决方案2】:

以下代码可以正常工作。不确定这是否是您尝试解析的 Json 结构。

public class Test
{
    public static void main( String[] args )
    {
        Gson gson = new Gson();

        Response response = gson.fromJson( THE_JSON, Response.class );

        System.out.println( response.object1 );
        System.out.println( response.object1 );
        System.out.println( response.stringx );
    }

    class Response
    {
        @SerializedName("Objectx1")
        Objectx object1;

        @SerializedName("Objectx2")
        Objectx object2;

        @SerializedName("Stringx")
        String stringx;

        class Objectx
        {
            @SerializedName("param1")
            String param1;

            @SerializedName("param2")
            String param2;
        }
    }
}

THE_JSON 是:

{
    "Objectx1": {
        "param1": "value1",
        "param2": "value2"
    },
    "Objectx2": {
        "param1": "value3",
        "param2": "value4"
    },
    "Stringx": '{
        "param3": "value3",
        "param4": "value4"
    }'
}

注意 Stringx 值周围的单引号。

【讨论】:

  • 您好,感谢您的回复,我得到 java.lang.IllegalStateException: Expected a string but was BEGIN_OBJECT E/AndroidRuntime(2705): at com.google.myjson.internal.bind.ReflectiveTypeAdapterFactory$Adapter .read(ReflectiveTypeAdapterFactory.java:174)。问题出在 Stringx 变量中,我无法将其解析为字符串我只是不明白为什么如果字符串的内容是 Json 对象,则无法将其序列化为字符串。我可能有旧版本的图书馆
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-18
  • 1970-01-01
  • 1970-01-01
  • 2017-05-03
相关资源
最近更新 更多