如何自定义特定字段的序列化/反序列化?
下面是我的json:
[{
"Short Name": "X",
"Address": "X Address",
"Latitude": 40.739982,
"Longitude": -73.978053,
"Type": "A, B"
},
{
"Short Name": "Y",
"Address": "Y Address",
"Latitude": 40.852856,
"Longitude": -73.938098,
"Type": "A, B, C, D"
}]
使用Gson,现在我可以解析json并得到一个String type;
的JAVA对象,但是我想拆分Type字符串并得到一个String[]
类型。
public class MyClass {
@SerializedName("Short Name")
@Expose
private String ShortName;
@Expose
private String Address;
@Expose
private Double Latitude;
@Expose
private Double Longitude;
@Expose
private String Type;
// how can I split the string
// and get private String[] Type;
// when deserializing
}
3条答案
按热度按时间35g0bw711#
您需要实现自定义类型适配器。
你可以这样做:
并从以下位置修改您的MyClass Bean:
至:
如果您需要序列化MyClass对象,以便将“Type”数组转换为String逗号分隔的字符串,则可以使用相同的方法添加序列化程序!
yeotifhr2#
简单。Json允许你使用数字(整型/长整型/双精度型)、字符串、列表或对象。你需要的是一个列表。
JSON格式:
【类型】:{【类型】:“数组”、“项”:{“类型”:“字符串”} }
例如,“类型”:[“甲”、“B”、“丙”、“丁”]
稍后,您可以使用任何Java List实现,如ArrayList。
例如,类型=新数组列表();
r7s23pms3#
您可以使用JsonAdapter来实现这一点下面是文档中示例
由于User类在@JsonAdapter注解中指定了UserJsonAdapter.class,因此将自动调用它来序列化/反序列化User示例。下面是如何将此注解应用于字段的示例。
可以在一个字段、该字段的类型和com. google. gson. GsonBuilder中指定不同的类型适配器。字段注解优先于GsonBuilder注册的类型适配器,而GsonBuilder注册的类型适配器又优先于注解的类型。
此注解引用得类必须是TypeAdapter或TypeAdapterFactory,或者必须实现JsonDeserializer或JsonSerializer中得一个或两个.使用TypeAdapterFactory可以委托给封闭得Gson示例.