`

delphi序列化对象的方法总结

阅读更多

摘自:http://blog.csdn.net/hnxxcxg/archive/2011/02/25/6207120.aspx
1.组件对象的序列化

从TCOMPONENT继承下来的组件对象序列化都简单,因为它本身支持流化,通过流化也就达到了序列化组件对象的目的。

TReader和TWriter都只支持Tcomponent流化,除非你自己写个TReader和TWriter,就有可能支持TPersiten的流化.
function   ComponentToString(Component:   TComponent):   string;

var
    BinStream:TMemoryStream;
    StrStream:   TStringStream;
    s:   string;
begin
    BinStream   :=   TMemoryStream.Create;
    try
        StrStream   :=   TStringStream.Create(s);
        try
            BinStream.WriteComponent(Component);
            BinStream.Seek(0,   soFromBeginning);
            ObjectBinaryToText(BinStream,   StrStream);
            StrStream.Seek(0,   soFromBeginning);
            Result:=   StrStream.DataString;
        finally
            StrStream.Free;

        end;
    finally
        BinStream.Free
    end;
end;

function   StringToComponent(Value:   string):   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(nil);

        finally
            BinStream.Free;
        end;
    finally
        StrStream.Free;
    end;
end;

2.非组件对象的序列化

非组件对象,也就是从TObject或者从Tpersisten继承下来的对象的序列化却要变通一下。

方法很简单,就是sizeof(TMyObject)的大小,定义一个buffer指向对象,直接把那一块内存写入文件,反序列化时从文件读取就可以了,
这就是对非组件对象有效的序列化.

服务端序列化对象发送流程:

第一步:

var

   buffer: array[0..1023] of char;//定义一个缓冲区

第二步:

Move(myobj, Buffer, Sizeof(count));//将对象的内存搬移到缓冲区

第三步:

WriteFileFromBuffer();//将缓冲区写入文件

第四步:

发送这个文件给客户端

客户端反序列化还原对象流程:

第一步:

接收這個文件

第二步:

ReadFileToBuffer()

第三步:

move(buffer,myobj,sizeof(count)) //还原对象


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/hnxxcxg/archive/2011/02/25/6207120.aspx
分享到:
评论

相关推荐

    delphi序列化与反序列化

    总结,Delphi中的序列化与反序列化是实现对象持久化和跨平台数据交换的关键技术。组件序列化主要依赖`WriteComponent`和`ReadComponent`,而结构体序列化则需要自定义的序列化代码。开发者应选择合适的序列化库,...

    文件流序列化

    3. **序列化对象**:对于复杂对象,需要手动序列化每个字段,或者使用第三方库如SuperObject或JSON.NET进行更高级的序列化。 4. **反序列化**:读取文件流中的数据以恢复对象状态。 ```delphi var BinaryReader...

    Delphi LiveBinding对象及对象序列化为JSON的例子

    总结起来,"Delphi LiveBinding对象及对象序列化为JSON的例子"展示了如何结合使用LiveBinding技术和JSON序列化来提高Delphi应用程序的用户体验和数据管理能力。通过LiveBinding,你可以轻松实现界面与对象之间的双向...

    Delphi演示TPersistent 类的使用方法附实例代码.rar

    在Delphi的组件开发中,很多自定义组件都会从TPersistent或TComponent派生,以便支持属性的序列化和反序列化。 6. **注意事项** 当从TPersistent派生类并定义属性时,需要注意的是,属性的读写访问器(Getters和...

    Delphi中文件流的基础使用方法

    3. 序列化和反序列化:文件流可以配合序列化技术(如XML、JSON或自定义格式),将对象的状态保存到文件,然后在需要时恢复。 四、异常处理 在进行文件流操作时,应考虑可能的异常情况,如文件不存在、无权限等。...

    Delphi XE7中解析JSON

    四、序列化和反序列化对象 Delphi XE7的`System.Json`单元也支持将Delphi的对象序列化为JSON,以及将JSON反序列化回对象。这需要你的类实现`ISerializable`接口。例如: ```delphi type TPerson = class...

    Delphi Json 解析器

    总结来说,"Delphi JSON解析器"是一个针对Delphi的优化JSON处理库,它提供了快速且稳定的JSON解析和序列化能力。通过简单的集成步骤,开发者可以轻松地在项目中利用这个解析器处理JSON数据,提升开发效率和应用程序...

    巧用Delphi 2010 RTTI 管理常量(const)!

    ### 巧用 Delphi 2010 RTTI 管理常量(const) #### 概述 在 Delphi 开发环境中,RTTI(Run-...此外,RTTI 还可以应用于更多高级特性,比如动态类型检查、对象序列化等,这些都是提高程序灵活性和可维护性的强大工具。

    Delphi无数据库存保存、修改数据

    源码示例通常会展示具体的实现细节,包括如何使用Delphi的文件操作API、如何序列化和反序列化对象,以及如何设计数据结构来支持高效的数据操作。通过阅读和分析这些代码,你可以深入理解无数据库环境下数据管理的...

    DELPHI XE10.4自定义类和数组的用法

    此外,为了与数据库或其他数据源交互,你可能需要将自定义类序列化到某种格式(如JSON或XML),然后从中反序列化。Delphi提供了许多库,如`System.JSON`,可以方便地实现这个功能。 在实际项目中,例如`Unit1.pas`...

    DELPHI 远程控制

    总结来说,DELPHI远程控制源程序涉及到网络编程、数据序列化、图形处理、文件传输和安全机制等多个方面的知识。开发者需要深入理解TCP/IP协议,掌握Delphi的组件使用,以及熟悉操作系统级别的交互,才能有效地构建出...

    delphi流相互转换

    总结,理解`MemoryStream`、`TList<String>`和`stringstream`之间的转换是Delphi编程中的关键技能,尤其是在处理数据序列化和网络通信时。熟练掌握这些转换技巧可以帮助你更有效地管理和操作数据。在实际项目中,...

    Delphi JOSE and JWT Library

    Delphi库实现了这种序列化,允许开发者在有限的传输通道中高效地使用JWT。 6. **应用领域** 该库适用于需要安全身份验证和授权的Delphi应用程序,如Web服务、移动应用后台、分布式系统等。它可以帮助开发者快速...

    DELPHI JSON 库

    总结一下,DELPHI JSON 库是一个用于Delphi的JSON处理工具,它修复了汉字乱码问题,并提供了丰富的源码示例,涵盖了JSON的解析和序列化操作。通过这些资源,开发者可以更好地理解和利用JSON格式在Delphi应用程序中的...

    REST Server in Delphi XE Using DataSnap中文版

    **反序列化**: 将 JSON 字符串转换回 Delphi 对象。 3. **数据绑定**: 支持直接将 JSON 数据绑定到 Delphi 组件中,如 TJSONObject 和 TJSONArray。 #### 4. REST 服务器与客户端的交互 - **客户端开发**: 文章...

    Delphi 11.3-superobject 跨平台的JSON处理单元andriod ios可用.rar

    将这些文件导入到Delphi工程中,可以使用其提供的类和方法来实现JSON的序列化和反序列化。 SuperObject的核心类是`ISuperObject`,它代表一个JSON对象。你可以通过调用`SO()`函数创建一个新的JSON对象,然后使用点...

    DelphiXe10 Json解析类(SuperObject)

    总结来说,SuperObject为Delphi XE10提供了强大而易用的JSON解析和序列化功能。通过灵活的API,开发者可以轻松地处理JSON数据,无论是解析来自网络的响应,还是构建用于发送的数据。尽管官方支持可能停留在XE7,但...

    delphixe10.2 支持json源文件,json.pas

    1. **序列化对象到JSON**:可以使用`TJSONObject`的`ObjectsToJSON`方法将Delphi对象转换成JSON字符串。 2. **反序列化JSON到对象**:通过`TJSONObject.ParseJSONValue`解析JSON字符串,并使用`TJSONObject`的`Get`...

    连连看游戏【Delphi版】

    最后,考虑到游戏的保存和加载功能,Delphi提供了序列化和反序列化的工具,如TStream和TMemoryStream,可以将游戏状态转化为二进制数据存储,下次启动游戏时再恢复。这需要用到一些基础的数据结构和文件操作知识,但...

    delphi画的树

    可能采用了某种序列化方式(如XML或JSON)将树结构保存到文件,然后在打开时反序列化恢复原来的树。 7. **源码**: 提供的源码是理解整个项目实现的关键。通过阅读和分析源码,我们可以学习到如何在Delphi中实现...

Global site tag (gtag.js) - Google Analytics