gpt4 book ai didi

android - 自定义序列化程序 - 使用 GSON 反序列化 BasicNameValuePair 列表

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:04:01 26 4
gpt4 key购买 nike

我正在尝试为一些 BasicNameValuePair 对象列表实现自定义 gson 序列化器/反序列化器。

我在这里看到了部分解决方案代码(用于序列化): How do I get Gson to serialize a list of basic name value pairs?

但是我也想实现反序列化,我尝试了机会,代码在这里:

package dto;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.message.BasicNameValuePair;


import com.google.gson.TypeAdapter;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonWriter;


public class KeyValuePairSerializer extends TypeAdapter<List<BasicNameValuePair>> {
@Override
public void write(JsonWriter out, List<BasicNameValuePair> data) throws IOException {
out.beginObject();
for(int i=0; i<data.size();i++){
out.name(data.get(i).getName());
out.value(data.get(i).getValue());
}
out.endObject();
}

@Override
public List<BasicNameValuePair> read(JsonReader in) throws IOException {
ArrayList<BasicNameValuePair> list=new ArrayList<BasicNameValuePair>();
in.beginObject();
while (in.hasNext()) {
String key = in.nextName();
String value = in.nextString();
list.add(new BasicNameValuePair(key,value));
}
in.endObject();
return list;
}

}

初始化和填充列表的代码

ArrayList<BasicNameValuePair> postParameters=new ArrayList<BasicNameValuePair>();
postParameters.add(new BasicNameValuePair("some_key","some_value"));

下面是使用新的 KeyValuePairSerializer 类的代码:

        GsonBuilder gsonBuilder= new GsonBuilder();
gsonBuilder.registerTypeAdapter(KeyValuePairSerializer.class, new KeyValuePairSerializer());
Gson gson1=gsonBuilder.create();

//serialization works just fine in the next line
String jsonUpdate=gson1.toJson(postParameters, KeyValuePairSerializer.class);


ArrayList<BasicNameValuePair> postParameters2 = new ArrayList<BasicNameValuePair>();
//postParameters2 = gson1.fromJson(jsonUpdate, KeyValuePairSerializer.class); //? how to cast properly
//deserialization throws an error, it can't cast from ArrayList<BasicNameValuePair> to KeyValuePairSerializer
gson1.fromJson(jsonUpdate, KeyValuePairSerializer.class);

问题是它在最后抛出异常,我不知道问题到底出在哪里,仍然不确定如何编写最后一行以将结果返回到新的 postParameters2 ArrayList 中。

最佳答案

改编自GSON Collections Examples :

GsonBuilder gsonBuilder= new GsonBuilder();
gsonBuilder.registerTypeAdapter(KeyValuePairSerializer.class, new KeyValuePairSerializer());
Gson gson1=gsonBuilder.create();

Type collectionType = new TypeToken<ArrayList<BasicNameValuePair>>(){}.getType();
ArrayList<BasicNameValuePair> postParameters2 = gson1.fromJson(jsonUpdate, collectionType);

关于android - 自定义序列化程序 - 使用 GSON 反序列化 BasicNameValuePair 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15522803/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com