Java序列化重命名字段

时间:2015-06-24 07:57:34

标签: java serialization

在序列化中,有任何方法可以序列化一些名称与应用程序中的名称不同的字段。例如,我有一个这样的类:

public class MyClass implements Serializeable {
    private String name;
    private String lastName;
}

我希望将序列化哪个字段name重命名为a1,将字段lastName重命名为a2

实际上我的应用提供了一种粗野的网络服务。据我所知,hessian使用java序列化来序列化对象并将它们流式传输到客户端。我们只是说在我们公司的一个部门和他们认为字段的名称应该是其他东西之间的客户之间存在对该主题的误解。

但我认为关注事业可能会让人分心。

1 个答案:

答案 0 :(得分:1)

我强烈建议使用诸如 XML JSON 之类的数据格式,这将使您的任务更加轻松,因为您可以编写自定义的“(de-)序列化程序”来为您执行转换。

如果您需要使用Java对象序列化,则需要两个类具有相同的类名(程序包名称和类名),并附加一个 serialVersionUID 并在其中具有相同的值。命令类序列化读回类。

package testbench;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;


public class MyClass implements Serializable {

    private static final long serialVersionUID = 1L;

    private String name;
    private String lastName;

    public MyClass(final String name, final String lastName) {
        this.name = name;
        this.lastName = lastName;
    }

    private void writeObject(final ObjectOutputStream out) throws IOException {
        out.writeUTF(name);
        out.writeUTF(lastName);
    }

    private void readObject(final ObjectInputStream in) throws IOException, ClassNotFoundException {
        name = in.readUTF();
        lastName = in.readUTF();
    }

    @Override
    public String toString() {
        return name + " " + lastName;
    }

}

客户端可以将其他类与其他方法和字段一起使用:

package testbench;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;


public class MyClass implements Serializable {

    private static final long serialVersionUID = 1L;

    private String a1;
    private String a2;

    public MyClass(final String a1, final String a2) {
        this.a1 = a1;
        this.a2 = a2;
    }

    private void writeObject(final ObjectOutputStream out) throws IOException {
        out.writeUTF(a1);
        out.writeUTF(a2);
    }

    private void readObject(final ObjectInputStream in) throws IOException, ClassNotFoundException {
        a1 = in.readUTF();
        a2 = in.readUTF();
    }

    @Override
    public String toString() {
        return a1 + " " + a2;
    }

}