Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Gson fromJson/反序列化到实例_Java_Json_Gson - Fatal编程技术网

Java Gson fromJson/反序列化到实例

Java Gson fromJson/反序列化到实例,java,json,gson,Java,Json,Gson,先编码 Gson gson = new Gson(); // 1. ClassA a = gson.fromJson(json, ClassA.class) gson.fromJson(jsonB, a)// make jsonB to a // 2. ClassB b = new ClassB(); b.setXXX(xxx); b.setYYY(yyy); ...... gson.fromJson(json, b)// make json to b 这可能吗?怎么做 编辑 // JSO

先编码

Gson gson = new Gson();

// 1.
ClassA a = gson.fromJson(json, ClassA.class)
gson.fromJson(jsonB, a)// make jsonB to a

// 2.
ClassB b = new ClassB();
b.setXXX(xxx);
b.setYYY(yyy);
......
gson.fromJson(json, b)// make json to b
这可能吗?怎么做

编辑

// JSON A

{
    "name":"wener"
}

// JSON B
{
    "age":22
}

// CLASS A
class A
{
    String name;
    Integer age;
}

// 
//
A a = gson.fromJson(JsonA, A.class)
// try to do somgthing like this
// this part is what I want to do.
gson.fromJson(JsonB, a)

// then
assert a.getName().equals("wener")
assert a.getAge().equals(22)
所以,只需要像这样的东西<代码>fromJsonToInstance(字符串,对象)

@Test
public void testMergeObject()
{
字符串jsonA=“{\'name\':\'wener\'}”;
字符串jsonB=“{\'age\':22}”;
Person=新人();
Gson Gson=new GsonBuilder().registerTypeAdapter(Person.class,new InstanceCreatorWithInstance(Person)).create();
fromJson(jsonA,Person.class);
fromJson(jsonB,Person.class);
断言person.getName()等于(“wener”);
断言person.getAge()等于(22);
}
@资料
静态类人
{
字符串名;
整数年龄;
}
静态类InstanceCreatorWithInstance实现InstanceCreator
{
T例;
公共实例CreatorWithInstance(T实例)
{
this.instance=instance;
}
@凌驾
公共T createInstance(类型)
{
返回实例;
}
}

现在,我知道我要做的是更改实例创建过程。

您能详细说明一下吗?我不知道你在问什么。您想知道Gson是如何创建对象代理的吗?或者你想知道它是如何注入值的?我更新了我的问题,并为自己找到了一种方法。但这涉及到另一个Gson实例。
@Test
public void testMergeObject()
{
    String jsonA = "{\"name\":\"wener\"}";
    String jsonB = "{\"age\":22}";
    Person person = new Person();
    Gson gson = new GsonBuilder().registerTypeAdapter(Person.class, new InstanceCreatorWithInstance<>(person)).create();
    gson.fromJson(jsonA, Person.class);
    gson.fromJson(jsonB, Person.class);

    assert person.getName().equals("wener");
    assert person.getAge().equals(22);
}
@Data
static class Person
{
    String name;
    Integer age;
}
static class InstanceCreatorWithInstance<T> implements InstanceCreator<T>
{
    T instance;

    public InstanceCreatorWithInstance(T instance)
    {
        this.instance = instance;
    }

    @Override
    public T createInstance(Type type)
    {
        return instance;
    }
}