我正在反序列化对象以准备将它们放入数据库中。我想要做的是用数据库类型标记字段,这样我就可以确保在我尝试插入时不会导致错误。
我想象我可以在字段上创建#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
注释中添加一个值,使您可以将某种类型的构造函数参数传递给JsonAdapter
或TypeAdapter
,这样您就不会仅限于您指定的类的默认实例。
所以,我的问题是,有没有比创建像TypeAdapterFactory
之类的东西更简单的方法,并且项目雷达上的其他想法是否切实可行?