在Delphi截止XE7的实现中,RTTI信息也并不是特别完美,所以在特定的情况下是无法获取到相应的RTTI信息,目前已知: 1、在implementation中的声明没有RTTI信息,所以你要使用ToRtti/FromRtti/ToRecord/FromRecord等函数,你必需保证用到的类型声明的interface
分类: QMsgPack
QMsgPack更新-增加几个函数并修改AsString的行为
【更新内容】 1、加入ValueFromStream/ValueFromFile/StreamFromValue/StreamFromFile函数,以更方便的赋二进制数据; 2、修改 AsString行为,改为返回标准的JSON字符串,MsgPack中如果映射的名字未指定,则在AsString时自动指定为空白字符。 【
QMsgPack更新-修正了FromRtti/ToRtti在处理TCollection类型时存在的问题
【问题描述】 由于FromRtti在处理TCollection类型的对象时,没有将对象类型改成数组,造成由于子结点没有名称而被提示:“对象 xxx 的第 n 个子结点名称未赋值,编码输出前必需赋值。”。 要重现问题,只需要简单的传递一个TCollection对象给FromRtti函数即可。 另外,对应的ToRtti函数
QMsgPack更新-新增两组函数
【更新内容】 1、XXXByName函数组,用于按类型XXX(Int、Float、Boolean、Float)来访问指定名称的子结点的值,如果相应的结点不存在,就返回指定的默认值。 2、XXXByPath函数组,用于按类型XXX(Int、Float、Boolean、Float)来访问指定路径的子结点的值,如果相应的路径
QMsgPack更新-增加Remove、Detach、AttachTo、MoveTo函数及允许重命名
【更新内容】 1、新增Remove函数移除指定的子结点,与Delete的区别在于Remove并不会释放子结点,而只是将其从父结点中移除而已。 /// <summary>将指定索引的子结点移除</summary> /// <param name=”AItemIndex”>要移除的子结点
QMsgPack更新-修正了解析数组元素数量在16~65535之间时出错的问题
【问题描述】 问题在于InternalParse函数解析时,少移动指针位置造成解析元素数量不匹配,从而出现问题 $DC: // array 16 begin Inc(p); DataType := mptArray; ACount := ExchangeByteOrder(PWord(p)^); Inc(p, 2);
QMsgPack-TClientDataSet内容直接保存到MessagePack数据流
QMsgPack支持AsVariant方法,而TClientDataSet提供了一个Data属性的Variant类型变量直接传递数据集内容,由此,我们可以方便的建立两者之间的关系。 【提示】 在Delphi的早期版本中,Data这个Variant类型的值内部使用的是AnsiString来存贮的字节流,但我并不确定Del
QMsgPack-Delphi/C++ Builder下MessagePack协议的高效实现
首先,关于MessagePack协议,访问http://msgpack.org可以了解详细的格式约定及各种语言的实现。 其次,MessagePack协议号称比JSON快,但速度的快慢这个东西受各个实现的限制,有的实现的Json比MessagePack的实现要更快一些,所以不要盲目的就随便拿一个MessagePack实现