1

我正在尝试使用 GSON 将对象转换为 JSON 格式。然后我会将 JSON 发送到用 php 编写的 web 服务。不幸的是,由于某种原因,方法 gson.toJson(object) 不起作用。

我有这个 java 对象 - 干预(这包含几个类型的字符串、日期、时间和位图字段)。当我尝试这样做时:

Gson gson = new Gson();
String json = gson.toJson(intervention);

我在 gson 变量中得到了这个:

gson={serializeNulls:falsefactories:[工厂[type=com.google.gson.JsonElement,adapter=com.google.gson.internal.bind.TypeAdapters$25@40fbe5c8], com.google.gson.internal.bind.ObjectTypeAdapter$1 @411b7db8,工厂[type=java.lang.String,adapter=com.google.gson.internal.bind.TypeAdapters$13@40ff42d0],工厂[type=java.lang.Integer+int,adapter=com.google.gson .internal.bind.TypeAdapters$7@411c00f8],工厂[type=java.lang.Boolean+boolean,adapter=com.google.gson.internal.bind.TypeAdapters$3@411b4798],工厂[type=java.lang.Byte +byte,adapter=com.google.gson.internal.bind.TypeAdapters$5@4122dbd0], 工厂[type=java.lang.Short+short,adapter=com.google.gson.internal.bind.TypeAdapters$6@4122a0c8] , 工厂[type=java.lang.Long+long,adapter=com.google.gson.internal.bind.TypeAdapters$8@40fc5d98], 工厂[type=java.lang.Double+double,adapter=com.google.gson.Gson$4@412295f0],工厂[type=java.lang.Float+float,adapter=com.google.gson.Gson$5@41229898],工厂[type=java.lang.Number,adapter=com. google.gson.internal.bind.TypeAdapters$11@41223618],工厂[type=java.lang.Character+char,adapter=com.google.gson.internal.bind.TypeAdapters$12@41224168],工厂[type=java. lang.StringBuilder,adapter=com.google.gson.internal.bind.TypeAdapters$16@411a7550], 工厂[type=java.lang.StringBuffer,adapter=com.google.gson.internal.bind.TypeAdapters$17@411a7790],工厂[type=java.math.BigDecimal,adapter=com.google.gson.internal.bind.TypeAdapters$14@40ff4568], 工厂[type=java.math.BigInteger,adapter=com.google.gson.internal.bind. TypeAdapters$15@411b4440]、Factory[type=java.net.URL,adapter=com.google.gson.internal.bind.TypeAdapters$18@411be338]、Factory[type=java.net.URI,adapter=com.google。gson.internal.bind.TypeAdapters$19@41229028],工厂[type=java.util.UUID,adapter=com.google.gson.internal.bind.TypeAdapters$21@411a2200],工厂[type=java.util.Locale,适配器=com.google.gson.internal.bind.TypeAdapters$24@411a2510],工厂[typeHierarchy=java.net.InetAddress,adapter=com.google.gson.internal.bind.TypeAdapters$20@41229328],工厂[type= java.util.BitSet,adapter=com.google.gson.internal.bind.TypeAdapters$2@411ca140], com.google.gson.internal.bind.DateTypeAdapter$1@412024f8, Factory[type=java.util.Calendar+java .util.GregorianCalendar,adapter=com.google.gson.internal.bind.TypeAdapters$23@411bef70], com.google.gson.internal.bind.TimeTypeAdapter$1@41229920, com.google.gson.internal.bind.SqlDateTypeAdapter$1 @411b67c0,com.google.gson.internal.bind.TypeAdapters$22@411a2500,com.google.gson.internal.bind。ArrayTypeAdapter$1@41222e90, com.google.gson.internal.bind.TypeAdapters$26@411b7ca0, Factory[type=java.lang.Class,adapter=com.google.gson.internal.bind.TypeAdapters$1@4121d940], com. google.gson.internal.Excluder@4122a3c8, com.google.gson.internal.bind.CollectionTypeAdapterFactory@40ff26d0, com.google.gson.internal.bind.MapTypeAdapterFactory@40ff2980, com.google.gson.internal.bind.ReflectiveTypeAdapterFactory@ 40ff2ba0],instanceCreators:{}}ReflectiveTypeAdapterFactory@40ff2ba0],instanceCreators:{}}ReflectiveTypeAdapterFactory@40ff2ba0],instanceCreators:{}}

import android.graphics.Bitmap;
import com.google.gson.annotations.SerializedName;
import java.util.Date;

公开课干预{

@SerializedName("case_id")
private String case_id;
public String getCase_id() {
    return case_id;
}

@SerializedName("user_id")
private String user_id;
public String getUser_id() {
    return user_id;
}

@SerializedName("account_id")
private String account_id;
public String getAccount_id() {
    return account_id;
}

@SerializedName("description")
private String description;
public String getDescription() {
    return description;
}

@SerializedName("solution")
private String solution;
public String getSolution() {
    return solution;
}

@SerializedName("status")
private String status;
public String getStatus() {
    return status;
}

@SerializedName("user_remarks")
private String user_remarks;
public String getUser_remarks() {
    return user_remarks;
}


@SerializedName("customer_remarks")
private String customer_remarks;
public String getCustomer_remarks() {
    return customer_remarks;
}

@SerializedName("case_complete")
private boolean case_complete;
public boolean isCase_complete() {
    return case_complete;
}

@SerializedName("charge_transport")
private boolean charge_transport;
public boolean isCharge_transport() {
    return charge_transport;
}

@SerializedName("service_billable")
private boolean service_billable;
public boolean isService_billable() {
    return service_billable;
}

@SerializedName("date_created")
private Date date_created;
public Date getDate_created() {
    return date_created;
}

@SerializedName("arrival_time")
private String arrival_time;
public String getArrival_time() {
    return arrival_time;
}

@SerializedName("departure_time")
private String departure_time;
public String getDeparture_time() {
    return departure_time;
}

@SerializedName("user_sign")
private Bitmap user_sign;
public Bitmap getUser_sign() {
    return user_sign;
}

@SerializedName("cust_sign")
private Bitmap cust_sign;
public Bitmap getCust_sign() {
    return cust_sign;
}

public void setUser_id(String user_id) {
    this.user_id = user_id;
}

public void setCase_id(String case_id) {
    this.case_id = case_id;
}


public void setAccount_id(String account_id) {
    this.account_id = account_id;
}



public void setDescription(String description) {
    this.description = description;
}



public void setSolution(String solution) {
    this.solution = solution;
}



public void setStatus(String status) {
    this.status = status;
}


public void setUser_remarks(String user_remarks) {
    this.user_remarks = user_remarks;
}



public void setCustomer_remarks(String customer_remarks) {
    this.customer_remarks = customer_remarks;
}



public void setCase_complete(boolean case_complete) {
    this.case_complete = case_complete;
}



public void setCharge_transport(boolean charge_transport) {
    this.charge_transport = charge_transport;
}

public void setService_billable(boolean service_billable) {
    this.service_billable = service_billable;
}


public void setDate_created(Date date_created) {
    this.date_created = date_created;
}

public void setArrival_time(String arrival_time) {
    this.arrival_time = arrival_time;
}


public void setDeparture_time(String departure_time) {
    this.departure_time = departure_time;
}

public void setUser_sign(Bitmap user_sign) {
    this.user_sign = user_sign;
}

public void setCust_sign(Bitmap cust_sign) {
    this.cust_sign = cust_sign;
}

}

上面的类是对象类。

我验证了对象干预并填充了字段。有人可以向我解释我在这里做错了什么吗?

4

1 回答 1

4

当前版本的Gson(2.2.2) 对象没有问题,Date并且可以很好地序列化/反序列化它们。如果您正在寻找一种特定的格式,您可以使用setDateFormat()inGsonBuilder来指定它。

你的Bitmap对象是一个不同的问题。这是一个非常复杂的对象,而不是 Gson 知道如何处理的东西(没关系,甚至很难用 JSON 表示)。您需要编写自定义序列化器和反序列化器来处理它。

浏览一下文档,Bitmap您似乎可以使用适当的静态方法将像素数据提取到int[]数组中getPixels(),也可以从该数据中构造一个。您将需要编写一个序列化器,从中生成 JSON(并且还包括其他参数),然后编写一个知道如何读取该 JSON 并返回.BitmapcreateBitmap()Bitmap

有关编写自定义序列化程序/反序列化程序的信息可以在 Gson 用户指南中找到:https ://sites.google.com/site/gson/gson-user-guide#TOC-Custom-Serialization-and-Deserialization

于 2013-02-27T22:24:47.143 回答