如何使用Gson序列化android中的对象?
Posted
技术标签:
【中文标题】如何使用Gson序列化android中的对象?【英文标题】:How to use Gson to serialize objects in android? 【发布时间】:2015-04-08 03:25:16 【问题描述】:我想使用套接字从 android 客户端向 Java 服务器发送 2 个对象(因为我正在开发远程 PC)。
AndroidClient.java
public class MainActivity extends Activity
Socket client;
ObjectOutputStream oos;
OutputStream os;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SendObj so=new SendObj();
so.execute();
class SendObj extends AsyncTask<Void, Void, Void>
@Override
protected Void doInBackground(Void... arg0)
try
client=new Socket("192.168.237.1",6566);
os=client.getOutputStream();
oos=new ObjectOutputStream(os);
Serializer ma=new Serializer(2, "Helllo");
Log.i("Serial",""+ma.name);
oos.writeObject(ma);
oos.writeObject(new String("Another Object from Client"));
oos.close();
os.close();
client.close();
catch (UnknownHostException e)
e.printStackTrace();
catch (IOException e)
e.printStackTrace();
return null;
@Override
public boolean onCreateOptionsMenu(Menu menu)
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
@SuppressWarnings("serial")
class Serializer implements Serializable
int num;
String name;
public Serializer(int num,String name)
this.name=name;
this.num=num;
JavaServer.java
public class ObjectReceiver
static ServerSocket server;
static Socket client;
static ObjectInputStream ois;
static InputStream is;
public static void main(String[] arg) throws IOException, ClassNotFoundException
server=new ServerSocket(6566);
System.out.println("Wait");
while(true)
client=server.accept();
System.out.println("Connected");
is=client.getInputStream();
ois=new ObjectInputStream(is);
try
ObjectSerail or = (ObjectSerail) ois.readObject();
if(or!=null)
System.out.println("Done");
catch (ClassNotFoundException e)
e.printStackTrace();
@SuppressWarnings("serial")
class ObjectSerail implements Serializable
int num;
String name;
public ObjectSerail(int num,String name)
this.name=name;
this.num=num;
当然我知道上面的方法行不通,因为它会给出ClassNotFoundException()
。所以现在我想知道如何使用 Gson 库来序列化和反序列化对象。提前致谢。
【问题讨论】:
【参考方案1】:gson 可以在任何平台上与 Java 一起使用——不仅仅是 Android。
使用gson序列化单个对象:
// Serialize a single object.
public String serializeToJson(MyClass myClass)
Gson gson = new Gson();
String j = gson.toJson(myClass);
return j;
使用 gson 反序列化为单个对象。
// Deserialize to single object.
public MyClass deserializeFromJson(String jsonString)
Gson gson = new Gson();
MyClass myClass = gson.fromJson(jsonString, MyClass.class);
return myClass;
正如您从示例中看到的那样,gson 非常神奇 :) 它实际上并不神奇 - 您至少需要确保几件事:
确保你的类有一个无参数构造函数,以便 gson 库可以轻松获取实例。
确保属性名称与 json 中的名称匹配,以便 gson 库可以将 json 中的字段映射到您的类中的字段。
另见https://sites.google.com/site/gson/gson-user-guide#TOC-Object-Examples
【讨论】:
以上是关于如何使用Gson序列化android中的对象?的主要内容,如果未能解决你的问题,请参考以下文章