delphi如何进行对象序列化和反序列化?

chenyq2008 2009-04-14 02:00:26
可以给个例子吗?
...全文
861 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
liangpei2008 2009-04-14
  • 打赏
  • 举报
回复
自己做工具类!
实体类一般都类似于POJO性质的,无侵入性且基类一般都为Object,这时如果在客户端上传至业务层时,就需要用RTTI来实现ObjectToXML和XMLToObject这些功能!
不管名字叫序列化还是串行化,个人感觉都很形象!毕竟是在网络上传输都需要化整为零,排队依次向目的地前进!
Harryfin 2009-04-14
  • 打赏
  • 举报
回复
协助 -> 借助
Harryfin 2009-04-14
  • 打赏
  • 举报
回复
看你要序列化什么,序列化成什么吧,WriteComponent的局限是只能用于TComponent子类。

DELPHI这方面目前比较欠缺。如果想弄成XML的话,我暂时是协助remobjects的TROComplexType来做的,它有个ObjectToXML和XMLToObject的方法方便转换。或者自己写。

ps. to 5楼:还有个更“怪”的说法叫“串行化”
sanguomi 2009-04-14
  • 打赏
  • 举报
回复
我记得月亮贴这俩函数都贴过俩次了,呵呵
sanguomi 2009-04-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 chenyq2008 的回复:]
引用 1 楼 hongqi162 的回复:
Delphi(Pascal) codefunction ComponentToStr(AComponent: TComponent): string;
var
BinStream: TMemoryStream;
StrStream: TStringStream;
s: string;
begin
BinStream := TMemoryStream.Create;
try
StrStream := TStringStream.Create(s);
try
BinStream.WriteComponent(AComponent);
BinStream.Seek(0, soFromBeginning);
Objec…
[/Quote]
看着函数传参数
深宇 2009-04-14
  • 打赏
  • 举报
回复
呵呵,也可以叫持久化!叫法而已,不必太在意!
jadeluo 2009-04-14
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 skertone 的回复:]
不知哪个家伙翻译的的,这个操作竟然叫 序列化
[/Quote]

那你觉得翻译成什么比较合适呢?
skertone 2009-04-14
  • 打赏
  • 举报
回复
不知哪个家伙翻译的的,这个操作竟然叫 序列化
gwhdaxia 2009-04-14
  • 打赏
  • 举报
回复
搞本书翻一下,都写的很详细
bdmh 2009-04-14
  • 打赏
  • 举报
回复
将需要的Component以流的形式保存到string或文件中
使用时从文件中读取出来并显示以及访问
chenyq2008 2009-04-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hongqi162 的回复:]
Delphi(Pascal) codefunction ComponentToStr(AComponent: TComponent): string;
var
BinStream: TMemoryStream;
StrStream: TStringStream;
s: string;
begin
BinStream := TMemoryStream.Create;
try
StrStream := TStringStream.Create(s);
try
BinStream.WriteComponent(AComponent);
BinStream.Seek(0, soFromBeginning);
ObjectBinaryToText(BinStream, StrStream);

[/Quote]

怎么使用啊???
hongqi162 2009-04-14
  • 打赏
  • 举报
回复
function ComponentToStr(AComponent: TComponent): string;
var
BinStream: TMemoryStream;
StrStream: TStringStream;
s: string;
begin
BinStream := TMemoryStream.Create;
try
StrStream := TStringStream.Create(s);
try
BinStream.WriteComponent(AComponent);
BinStream.Seek(0, soFromBeginning);
ObjectBinaryToText(BinStream, StrStream);
StrStream.Seek(0, soFromBeginning);
Result := StrStream.DataString;
finally
StrStream.Free;
end;
finally
BinStream.Free
end;
end;

function StrToComponent(const Value: string;
Instance: TComponent): TComponent;
var
StrStream: TStringStream;
BinStream: TMemoryStream;
begin
StrStream := TStringStream.Create(Value);
try
BinStream := TMemoryStream.Create;
try
ObjectTextToBinary(StrStream, BinStream);
BinStream.Seek(0, soFromBeginning);
Result := BinStream.ReadComponent(Instance);
finally
BinStream.Free;
end;
finally
StrStream.Free;
end;
end;

5,402

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧