在Gson中,我如何使用自己的注释复制@JsonAdapter对字段的作用?

时间:2016-12-07 19:20:09

标签: java annotations gson

我正在反序列化对象以准备将它们放入数据库中。我想要做的是用数据库类型标记字段,这样我就可以确保在我尝试插入时不会导致错误。

我想象我可以在字段上创建#include <iostream> #include <cstdlib> #include <fstream> using namespace std; struct details { char name[30]; int add_year; }; const char * file = "students.dat"; int main() { details x; ifstream ifile; ifile.open(file,ios_base::in|ios_base::binary); if(ifile.is_open()) { cout<<"Contents of "<<file<<" is"<<endl; while(ifile.read((char *)&x,sizeof x)) { cout<<x.name<<" - "<<x.add_year<<endl; } ifile.close(); } ofstream ofile(file,ios_base::out|ios_base::app|ios_base::binary); if(!ofile.is_open()) { cerr<<"Can't open "<<file<<endl; exit(EXIT_FAILURE); } cout<<"Name"<<endl; cin.get(x.name,30); cout<<"Year added"<<endl; cin>>x.add_year; ofile.write((char *) &x, sizeof x); ofile.close(); cin.get(); return 0; } @VarChar(50)这样的注释,这些注释将对应于确保反序列化值适合的@Numeric(5, 2)

我尝试编写自己的TypeAdapter版本,但我认为自己确信这只会在JsonAdapterAnnotationTypeAdapterFactory注释中进行操作。

看起来我需要做一些事情,比如重写@JsonAdapter来处理字段级别的注释,但这看起来相当复杂,我想确保这不是一种更简单的方法。

特别是,如果有一种方法可以注册要在字段级别使用的注释来指定ReflectiveTypeAdapterFactory,那将会非常棒。特别是,TypeAdapterFactory应该能够查看注释实例并提取其值。

另一种选择是在TypeAdapterFactory注释中添加一个值,使您可以将某种类型的构造函数参数传递给JsonAdapterTypeAdapter,这样您就不会仅限于您指定的类的默认实例。

所以,我的问题是,有没有比创建像TypeAdapterFactory之类的东西更简单的方法,并且项目雷达上的其他想法是否切实可行?

0 个答案:

没有答案