我正在尝试使用GSON将对象转换为JSON格式。然后我将把JSON发送到用php编写的web服务。不幸的是由于某种原因,方法gson.toJson(对象)不起作用。
我有这个java对象 - 干预(它包含几个字段String,Date,Time和bitmaps的字段)。当我尝试这样做时:
Gson gson = new Gson();
String json = gson.toJson(intervention);
我在gson变量中得到了这个:
GSON = {serializeNulls:falsefactories:[出厂[类型= com.google.gson.JsonElement,适配器= com.google.gson.internal.bind.TypeAdapters $ 25 @ 40fbe5c8] com.google.gson.internal.bind.ObjectTypeAdapter$1@411b7db8, 厂[类型= java.lang.String中,适配器= com.google.gson.internal.bind.TypeAdapters $ 13 @ 40ff42d0] 工厂[类型= java.lang.Integer中+ INT,适配器= com.google.gson.internal.bind.TypeAdapters $ 7 @ 411c00f8] 工厂[类型= java.lang.Boolean的+布尔值,适配器= com.google.gson.internal.bind.TypeAdapters $ 3□411b4798] 工厂[类型= java.lang.Byte中+字节,适配器= com.google.gson.internal.bind.TypeAdapters 5 $ @ 4122dbd0] Factory [type = java.lang.Short + short,adapter = com.google.gson.internal.bind.TypeAdapters $ 6 @ 4122a0c8],Factory [type = java.lang.Long + long,adapter = com.google.gson。 internal.bind.TypeAdapters$8@40fc5d98] 工厂[类型= java.lang.Double中+双,适配器= com.google.gson.Gson $ 4 @ 412295f0] 工厂[类型= java.lang.Float中+浮动,适配器= com.google.gson.Gson $ 5 @ 41229898], 厂[类型= java.lang.Number中,适配器= @ 41223618 com.google.gson.internal.bind.TypeAdapters $ 11] Factory [type = java.lang.Character + char,adapter = com.google.gson.internal.bind.TypeAdapters $ 12 @ 41224168],Factory [type = java.lang.StringBuilder,adapter = com.google.gson.internal。 bind.TypeAdapters$16@411a7550] 厂[类型= java.lang.StringBuffer中,适配器= com.google.gson.internal.bind.TypeAdapters $ 17 @ 411a7790] 厂[类型= java.math.BigDecimal中,适配器= com.google.gson.internal.bind.TypeAdapters $ 14 @ 40ff4568] 厂[类型= java.math.BigInteger中,适配器= com.google.gson.internal.bind.TypeAdapters $ 15 @ 411b4440] 厂[类型= java.net.URL中,适配器= com.google.gson.internal.bind.TypeAdapters $ 18 @ 411be338] 厂[类型= java.net.URI中,适配器= com.google.gson.internal.bind.TypeAdapters $ @ 19日41229028] 厂[类型= java.util.UUID中,适配器= com.google.gson.internal.bind.TypeAdapters $ 21 @ 411a2200] 厂[类型= java.util.Locale中,适配器= com.google.gson.internal.bind.TypeAdapters $ 24 @ 411a2510] 厂[typeHierarchy = java.net.InetAddress中,适配器= com.google.gson.internal.bind.TypeAdapters $ 20□41229328] 厂[类型= java.util.BitSet中,适配器= com.google.gson.internal.bind.TypeAdapters $ -2 @ 411ca140] com.google.gson.internal.bind.DateTypeAdapter$1@412024f8, 工厂[类型= java.util.Calendar中+ java.util.GregorianCalendar中,适配器= 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, 厂[类型= java.lang.Class中,适配器= 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:{}}
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;
}
}
上面的类是对象类。
我验证了对象干预并填充了字段。有人可以向我解释我在这里做错了什么吗?
答案 0 :(得分:4)
当前版本的Gson
(2.2.2)对Date
个对象没有问题,并且会很好地序列化/反序列化它们。如果您要查找特定格式,可以使用setDateFormat()
中的GsonBuilder
进行指定。
您的Bitmap
对象是另一个问题。这是一个非常复杂的对象,而不是Gson将要知道如何处理的东西(更不用说甚至非常难以在JSON中表示)。您需要编写自定义序列化程序和反序列化程序来处理它。
浏览Bitmap
的文档时,您可以使用int[]
将像素数据提取到getPixels()
数组中,并使用该数据从该数据构建Bitmap
适当的静态createBitmap()
方法。您需要编写一个从此生成JSON的序列化程序(还包括其他参数),然后编写一个知道如何读取该JSON并返回Bitmap
的反序列化器。
有关编写自定义序列化器/反序列化器的信息,请参阅Gson用户指南:https://sites.google.com/site/gson/gson-user-guide#TOC-Custom-Serialization-and-Deserialization