如何解决具有Gson序列化/反序列化的抽象类
我希望从json获得sizeToFit
。
pojos看起来像这样:
_datePicker = new UIDatePicker(new CGRect(0,30,0));
_datePicker.AutoresizingMask = UIViewAutoresizing.FlexibleRightMargin;
_datePicker.Frame = new CGRect(_datePicker.Frame.Location,new CGSize(300,_datePicker.Frame.Size.Height));
_datePicker.Mode = _datePickerMode;
_datePicker.Date = (NSDate)_defaultDate;
_datePicker.PreferredDatePickerStyle = UIDatePickerStyle.Wheels; //Add this in ios14
_datePicker.SizeToFit(); //Add this in ios14
序列化工作正常,它生成json,但是在反序列化时崩溃(也许是抽象类或/并且我期望使用LinkedList<Request>
和/或lombok注释)?
我尝试编写一个gson解串器(相当多的标准查找谷歌搜索工具),但是它不能完成任务。
解决方法
由于@fluffy的建议,我设法跳过编写自定义反序列化程序,并使用RuntimeTypeAdapterFactory
库中的gson-extras
:
public static void writeObjectToFile(Object object,String filePath) {
RuntimeTypeAdapterFactory<Parameter> parameterAdapterFactory = RuntimeTypeAdapterFactory.of(Parameter.class,"type");
parameterAdapterFactory.registerSubtype(StringParameter.class,"StringParameter");
parameterAdapterFactory.registerSubtype(PasswordParameter.class,"PasswordParameter");
Gson gson = new GsonBuilder().setPrettyPrinting().registerTypeAdapterFactory(parameterAdapterFactory).create();
try {
FileWriter fileWriter = new FileWriter(filePath);
gson.toJson(object,fileWriter);
fileWriter.flush();
fileWriter.close();
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
public static LinkedList<Request> readObjectFromFile(String filePath) {
RuntimeTypeAdapterFactory<Parameter> parameterAdapterFactory = RuntimeTypeAdapterFactory.of(Parameter.class,"PasswordParameter");
Gson gson = new GsonBuilder().setPrettyPrinting().registerTypeAdapterFactory(parameterAdapterFactory).create();
try {
BufferedReader jsonBuffer = new BufferedReader(new FileReader(filePath));
return gson.fromJson(jsonBuffer,new TypeToken<LinkedList<Request>>(){}.getType());
} catch (FileNotFoundException e) {
System.out.println(e.getMessage());
}
return null;
}
我还只保留了lombok
批注,没有为POJO编写构造函数和getters / setters。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。