0

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

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 对象。Class X { Object1 x1 // 预期的 json -> '{"param1": "pvalue", "param2":"pvalue"}' Object2 x2 //预期的 json -> '{"param1": "pvalue", "param2 ":"pvalue"}' String x3 //expected json ->'{"param1": "pvalue", "param2":"pvalue"}' } 如何将 x3 的内容保存在 String 而不是作为目的。
谢谢

4

2 回答 2

0

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

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

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

Javadoc 用户指南

于 2012-11-16T14:25:57.190 回答
0

下面的代码工作得很好。不确定这是否是您尝试解析的 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 值的单个引号。

于 2012-11-16T14:37:59.510 回答