SPDataPickle 是一种轻便高效的结构化数据和xml/json/protobuf自动序列化库,很适合 RPC 数据交换的场合。
http://code.google.com/p/spdatapickle
http://spdatapickle.googlecode.com/files/spdatapickle-0.5.src.tar.gz
大家可能对 google 的 protocol buffers 都早有耳闻。SPDataPickle 和 protobuf 很相似。
仿照 google protobuf 的例子,也来一个 Person 的简单例子。
对应 a.proto ,要写一个 a.xml
<metainfo prefix="XYZ" filename="account">
<struct name="Person">
<field name="id" type="int32" />
<field name="name" type="*char" />
<field name="email" type="*char" />
</struct>
</metainfo>
然后使用 spxml2struct 处理这个 a.xml,生成具体的 structure 定义和 metainfo 。
enum {
eTypeXYZPerson = eTypeSPDPUserDefine + 1
};
typedef struct tagXYZPerson {
int mId;
char * mName;
char * mEmail;
} XYZPerson_t;
typedef struct tagSP_DPMetaInfo SP_DPMetaInfo_t;
extern SP_DPMetaInfo_t * gXYZAccountMetaInfo;
然后就可以对这个 XYZPerson_t 结构进行序列化和反序列化。
int main( int argc, char * argv[] )
{
XYZPerson_t person;
person.mId = 123;
person.mName = strdup( "Bob" );
person.mEmail = strdup( "bob@example.com" );
SP_XmlStringBuffer buffer;
SP_XmlPickle pickle( gXYZAccountMetaInfo );
pickle.pickle( &person, sizeof( person ), eTypeXYZPerson, &buffer );
printf( "xml: %s\n", buffer.getBuffer() );
XYZPerson_t other;
pickle.unpickle( buffer.getBuffer(), buffer.getSize(),
eTypeXYZPerson, &other, sizeof( other ) );
printf( "id %d, name %s, email %s\n", other.mId, other.mName, other.mEmail );
SP_DPAlloc alloc( gXYZAccountMetaInfo );
alloc.free( &person, sizeof( person ), eTypeXYZPerson );
alloc.free( &other, sizeof( person ), eTypeXYZPerson );
return 0;
}
输出结果
xml: <Person>
<id>123</id>
<name>Bob</name>
<email>bob@example.com</email>
</Person>
id 123, name Bob, email bob@example.com
分享到:
相关推荐
xpack代码,用于结构体和xml/json之间的转换
C语言教学课件:c语言结构体.ppt
用于在C++结构体和json/xml之间互相转换, bson在xbson中支持。 只需要头文件, 无需编译库文件。 具体可以参考example的例子
C语言程序设计:c语言结构体.ppt
在cjson基础上,实现了字符串与结构体自动相互转化的功能。 可以自动将字符串(JSON格式)转化为对应的结构体,反之亦可。
C语言全套资料 C语言程序设计 C语言算法 C语言课件 C语言顺序程序设计,C语言数组,C语言循环控制,C语言预处理命令,C语言文件操作指针,C语言选择结构程序设计,C语言结构体与共用体,C语言文件操作,C语言函数
C语言结构体与共用体,C语言结构体与共用体的使用方法介绍
1、结构体转XML:定义...2、XML转结构体:这个不能直接转化,根据结构体定义,可生成XML转结构体的cs文件,可将生成文件中的类拷贝到你的工程中,调用相应函数,直接将第1步生成的XML字符串逆向转换为定义的结构体。
C语言:指向结构体的指针.c
文章主要对C语言结构体的位域知识进行详细介绍。
简单的C语言结构体范例代码,需要的可以拿走参考一下
详细介绍c语言结构体与公用体, ppt课件
详解C语言Struct(结构体)系列的第一部分的全部文章合集,具体分析文章见: http://blog.csdn.net/column/details/structure.html 第二季近期会很快提供
C语言结构体部分内容详解包括结构体定义及使用,结构体函数的定义及使用,指向结构体的指针
深入解析JNA—模拟C语言结构体
就是结构体的用法,C语言结构体的用法.ppt
C语言课件:10结构体与共用体.ppt
C语言结构体链表的排序方法汇总 ========================== 功能:选择排序(由小到大) 返回:指向链表表头的指针 ========================== */ /* 选择排序的基本思想就是反复从还未排好序的那些节点中, ...