ios接收java序列化对象_iOS 自动实现对象序列化方法

- (instancetype)initWithCoder:(NSCoder *)aDecoder

{

self=[self init];if(self) {

unsignedintcount;

Ivar*varArray = class_copyIvarList([self class], &count);for (int i = 0; i < count; i++) {

Ivar var=varArray[i];const char *cName = ivar_getName(var); //属性名c字符串

NSString *proName = [[NSString stringWithUTF8String:cName] substringFromIndex:1]; //OC字符串,并且去掉下划线 _

const char *cType = ivar_getTypeEncoding(var); //获取变量类型,c字符串

NSString *proType = [NSString stringWithUTF8String:cType]; //oc 字符串

if ([proType containsString:@"NSString"]) {

proType=stringType;

}if ([proType containsString:@"NSNumber"]) {

proType=numberType;

}if ([proType containsString:@"NSArray"]) {

proType=arrayType;

}if ([proType containsString:@"UIImage"]) {

proType=imageType;

}if ([proType isEqualToString:intType] || [proType isEqualToString:boolType] ||[proType isEqualToString:BoolType]) {

int32_t number=[aDecoder decodeInt32ForKey:proName];

[self setValue:@(number) forKey:proName];

}else if([proType isEqualToString:longTpye]) {

int64_t number=[aDecoder decodeInt64ForKey:proName];

[self setValue:@(number) forKey:proName];

}else if([proType isEqualToString:floatType]) {float number =[aDecoder decodeFloatForKey:proName];

[self setValue:@(number) forKey:proName];

}else if ([proType isEqualToString:longlongType] ||[proType isEqualToString:doubleType]) {double number =[aDecoder decodeFloatForKey:proName];

[self setValue:@(number) forKey:proName];

}else if ([proType isEqualToString:stringType]) { //string 类型

NSString *string =[aDecoder decodeObjectForKey:proName];

[self setValue:stringforKey:proName];

}else if([proType isEqualToString:numberType]) {

NSString*number =[aDecoder decodeObjectForKey:proName];

[self setValue:number forKey:proName];

}else if([proType isEqualToString:arrayType]) {

NSArray*array =[aDecoder decodeObjectForKey:proName];

[self setValue:array forKey:proName];

}else if ([proType isEqualToString:imageType]) { //image 类型

UIImage *image =[UIImage imageWithData:[aDecoder decodeDataObject]];

[self setValue:image forKey:proName];

}

}

}returnself;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的 C++ 11 代码,可以将对象序列化为二进制或 JSON 格式。 ``` #include <iostream> #include <fstream> #include <sstream> #include <string> #include <vector> #include <boost/archive/binary_iarchive.hpp> #include <boost/archive/binary_oarchive.hpp> #include <boost/archive/json_iarchive.hpp> #include <boost/archive/json_oarchive.hpp> #include <boost/serialization/vector.hpp> using namespace std; class MyData { public: string name; int value; vector<string> items; MyData() : name(""), value(0) {} MyData(const string& _name, int _value, const vector<string>& _items) : name(_name), value(_value), items(_items) {} template<class Archive> void serialize(Archive & ar, const unsigned int version) { ar & name; ar & value; ar & items; } }; int main() { // create an instance of MyData MyData data("my data", 42, {"item1", "item2", "item3"}); // serialize to binary ofstream ofs("mydata.bin", ios::binary); boost::archive::binary_oarchive bo(ofs); bo << data; // deserialize from binary MyData data2; ifstream ifs("mydata.bin", ios::binary); boost::archive::binary_iarchive bi(ifs); bi >> data2; cout << "name: " << data2.name << ", value: " << data2.value << endl; for (const auto& item : data2.items) { cout << "item: " << item << endl; } // serialize to JSON ostringstream oss; boost::archive::json_oarchive jo(oss); jo << data; string json_str = oss.str(); cout << "JSON: " << json_str << endl; // deserialize from JSON MyData data3; istringstream iss(json_str); boost::archive::json_iarchive ji(iss); ji >> data3; cout << "name: " << data3.name << ", value: " << data3.value << endl; for (const auto& item : data3.items) { cout << "item: " << item << endl; } return 0; } ``` 注意: 1、需要安装 Boost 库(具体安装方法请自行搜索)。 2、在此示例中,MyData 类定义了一个模板函数 serialize()。这是 Boost 序列化库所要求的,用来指示需要序列化的数据成员。 3、这个例子使用了 Boost 序列化库的二进制格式和 JSON 格式。其他格式也可用,具体用法可以参考 Boost 序列化库的文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值