- 浏览: 2174608 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (1878)
- [网站分类]ASP.NET (141)
- [网站分类]C# (80)
- [随笔分类]NET知识库 (80)
- [随笔分类]摘抄文字[非技术] (3)
- [随笔分类]养生保健 (4)
- [网站分类]读书区 (16)
- [随笔分类]赚钱 (7)
- [网站分类].NET新手区 (233)
- [随笔分类]网站 (75)
- [网站分类]企业信息化其他 (4)
- [网站分类]首页候选区 (34)
- [网站分类]转载区 (12)
- [网站分类]SQL Server (16)
- [网站分类]程序人生 (7)
- [网站分类]WinForm (2)
- [随笔分类]错误集 (12)
- [网站分类]JavaScript (3)
- [随笔分类]小说九鼎记 (69)
- [随笔分类]技术文章 (15)
- [网站分类]求职面试 (3)
- [网站分类]其他技术区 (6)
- [网站分类]非技术区 (10)
- [发布至博客园首页] (5)
- [网站分类]jQuery (6)
- [网站分类].NET精华区 (6)
- [网站分类]Html/Css (10)
- [随笔分类]加速及SEO (10)
- [网站分类]Google开发 (4)
- [随笔分类]旅游备注 (2)
- [网站分类]架构设计 (3)
- [网站分类]Linux (23)
- [随笔分类]重要注册 (3)
- [随笔分类]Linux+PHP (10)
- [网站分类]PHP (11)
- [网站分类]VS2010 (2)
- [网站分类]CLR (1)
- [网站分类]C++ (1)
- [网站分类]ASP.NET MVC (2)
- [网站分类]项目与团队管理 (1)
- [随笔分类]个人总结 (1)
- [随笔分类]问题集 (3)
- [网站分类]代码与软件发布 (1)
- [网站分类]Android开发 (1)
- [网站分类]MySQL (1)
- [网站分类]开源研究 (6)
- ddd (0)
- 好久没写blog了 (0)
- sqlserver (2)
最新评论
-
JamesLiuX:
博主,能组个队么,我是Freelancer新手。
Freelancer.com(原GAF – GetAFreelancer)帐户里的钱如何取出? -
yw10260609:
我认为在混淆前,最好把相关代码备份一下比较好,不然项目完成后, ...
DotFuscator 小记 -
日月葬花魂:
大哥 能 加我个QQ 交流一下嘛 ?51264722 我Q ...
web应用程序和Web网站区别 -
iaimg:
我想问下嵌入delphi写的程序总是出现窗体后面感觉有个主窗体 ...
C#自定义控件:WinForm将其它应用程序窗体嵌入自己内部 -
iaimg:
代码地址下不了啊!
C#自定义控件:WinForm将其它应用程序窗体嵌入自己内部
提到为了传递数据,需要把作为载体的实体类序列化,好好的找了一些序列化方面的介绍。感觉下面的这个介绍比较容易介绍!
1.什么是序列化 序列化是将对象状态转换为可保持或传输的格式的过程,在序列化过程中,对象的公共字段和私有字段以及类的名称(包括包含该类的程序集)都被转换为字节流,然后写入数据流。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。 2.为什么使用序列化 a. 一个原因是将对象的状态保持在存储媒体中,以便可以在以后重新创建精确的副本。 我们经常需要将对象的字段值保存到磁盘中,并在以后检索此数据。尽管不使用序列化也能完成这项工作,但这种方法通常很繁琐而且容易出错,并且在需要跟踪对象的层次结构时,会变得越来越复杂。可以想象一下编写包含大量对象的大型业务应用程序的情形,程序员不得不为每一个对象编写代码,以便将字段和属性保存至磁盘以及从磁盘还原这些字段和属性。序列化提供了轻松实现这个目标的快捷方法。 b.另一个原因是通过值将对象从一个应用程序域发送到另一个应用程序域中。 例如,序列化可用于在 ASP.NET 中保存会话状态并将对象复制到 Windows 窗体的剪贴板中。远程处理还可以使用序列化通过值将对象从一个应用程序域传递到另一个应用程序域中。 公共语言运行时 (CLR) 管理对象在内存中的分布,.NET 框架则通过使用反射提供自动的序列化机制。对象序列化后,类的名称、程序集以及类实例的所有数据成员均被写入存储媒体中。对象通常用成员变量来存储对其他实例的引用。类序列化后,序列化引擎将跟踪所有已序列化的引用对象,以确保同一对象不被序列化多次。.NET 框架所提供的序列化体系结构可以自动正确处理对象图表和循环引用。对对象图表的唯一要求是,由正在进行序列化的对象所引用的所有对象都必须标记为 Serializable(请参阅基本序列化)。否则,当序列化程序试图序列化未标记的对象时将会出现异常。 当反序列化已序列化的类时,将重新创建该类,并自动还原所有数据成员的值。 3.如何实现对象的序列化及反序列化 要实现对象的序列化,首先要保证该对象可以序列化。而且,序列化只是将对象的属性进行有效的保存,对于对象的一些方法则无法实现序列化的。 实现一个类可序列化的最简便的方法就是增加Serializable属性标记类。如: [Serializable()] public class MEABlock { private int m_ID; public string Caption; public MEABlock() { ///构造函数 } } 即可实现该类的可序列化。注意序列化的类必须为Public,否则不能够被序列化。 要将该类的实例序列化为到文件中?.NET FrameWork提供了两种方法: a .XML序列化 使用 XmLSerializer 类,可将下列项序列化。 公共类的公共读/写属性和字段 实现 ICollection 或 IEnumerable 的类。(注意只有集合会被序列化,而公共属性却不会。) XmlElement 对象。 XmlNode 对象。 DataSet 对象。 要实现上述类的实例的序列化,可参照如下例子: MEABlock myBlock = new MEABlock(); // Insert code to set properties and fields of the object. XmlSerializer mySerializer = new XmlSerializer(typeof(MEABlock)); // To write to a file, create a StreamWriter object. StreamWriter myWriter = new StreamWriter("myFileName.xml"); mySerializer.Serialize(myWriter, MEABlock); 需要注意的是XML序列化只会将public的字段保存,对于私有字段不予于保存。 生成的XML文件格式如下: <MEABlock> <Caption>Test</Caption> </MEABlock> 对于对象的反序列化,则如下: MEABlock myBlock; // Constructs an instance of the XmlSerializer with the type // of object that is being deserialized. XmlSerializer mySerializer = new XmlSerializer(typeof(MEABlock)); // To read the file, creates a FileStream. FileStream myFileStream = new FileStream("myFileName.xml", FileMode.Open); // Calls the Deserialize method and casts to the object type. myBlock = (MEABlock)mySerializer.Deserialize(myFileStream) b. 二进制序列化 与XML序列化不同的是,二进制序列化可以将类的实例中所有字段(包括私有和公有)都进行序列化操作。这就更方便、更准确的还原了对象的副本。 要实现上述类的实例的序列化,可参照如下例子: MEABlock myBlock = new MEABlock(); // Insert code to set properties and fields of the object. IFormatter formatter = new BinaryFormatter(); Stream stream = new FileStream("MyFile.bin",FileMode.Create,FileAccess.Write, FileShare.None); formatter.Serialize(stream, myBlock); stream.Close(); 对于对象的反序列化,则如下: IFormatter formatter = new BinaryFormatter(); Stream stream = new FileStream("MyFile.bin", FileMode.Open,FileAccess.Read, FileShare.Read); MEABlock myBlock = (MEABlock) formatter.Deserialize(stream); stream.Close(); 4、如何变相实现自定义可视化控件的序列化、反序列化 对于WinForm中自定义控件,由于继承于System.Windows.Form类,而Form类又是从MarshalByRefObject继承的,窗体本身无法做到序列化,窗体的实现基于Win32下GUI资源,不能脱离当前上下文存在。 当然可以采用变通的方法实现控件的序列化。这里采用的是记忆类模型。 定义记忆类(其实就是一个可序列化的实体类)用于记录控件的有效属性,需要序列化控件的时候,只需要将该控件的实例Copy到记忆类,演变成序列化保存该记忆类的操作。 反序列化是一个逆过程。将数据流反序列化成为该记忆类,再根据该记忆类的属性生成控件实例。而对于控件的一些事件、方法则可以继续使用。 wwf之所以强调要把类实例化,就是因为工作流和应用程序是在不同的线程中。二者之间需要用类作为传递数据的载体的话,就需要把该类定义为public序列化为二进制传输。 |
发表评论
-
where T:new() 是什么意思
2014-04-18 09:26 1463where T:new() 是什么意思 经常看到方法后面 ... -
好久没写blog了
2012-05-21 18:43 2好久没写blog了 -
test
2011-03-19 09:48 819testddddddddddd -
QQ自动发日志分析
2011-03-10 18:15 1269首先列举比较重要的问 ... -
test
2011-02-23 18:03 809test -
test
2011-02-23 17:53 880test -
为啥cnblogs的数据不能导了
2011-02-23 11:03 914为啥cnblogs的数据不能导了内容 -
如何保护.net中的dll文件(防破解、反编译)
2010-07-30 00:28 1495.net是一种建立在虚拟机上执行的语言,它直接生成 MSIL ... -
提搞网站访问速度可做哪些优化
2010-08-08 15:30 1123一、 服务器优化 ... -
ASP.NET(c#)如何判断浏览器是否支持cookies
2010-07-29 09:33 1718实例代码: 下面是写cookie ... -
N点虚拟主机管理系统(For Windows2003/2008)功能及介绍
2010-04-09 11:23 2265N点虚拟主机管理系统是 ... -
使用c#+(datagrid控件)编辑xml文件
2010-04-06 09:13 1170对xml文件的记录进行删除,修改,或增加新记录。 利用了d ... -
HTTP代理模块(HTTP Proxy)
2010-04-04 10:19 3050HTTP代理模块(HTTP Proxy ... -
Error 80040154 retreiving COM Class factory
2010-03-29 09:23 22571.ask: Greetings, I have ... -
petshop4.0 详解之二(数据访问层之数据库访问设计)
2010-03-27 11:08 1073在系列一中,我从整体上分析了PetShop的架构设计,并提及了 ... -
分享十五个最佳jQuery幻灯插件和教程
2010-03-25 09:17 2012<p>在网站前端中使用jQuery库已经变得越来越 ... -
20个软件开发常用设计文档大全下载
2009-08-27 10:22 973搜集了一些软件开发的常用文档,分享给大家 总下载地址: h ... -
asp.net 在线 mp3,wma, avi
2009-09-04 13:58 9321.前台js<script type="tex ... -
sql db link string
2009-09-06 21:52 985SQL Server ODBC Standar ... -
ASP.Net2.0小技巧 保持滚动条的位置 焦点移动到某个控件 $符号轻松的使用FindControl
2009-09-11 11:05 1302您可能不知道的ASP.Net2.0 ...
相关推荐
.NET框架中的XML序列化和反序列化是将XML文档数据转换为C#对象,以及将C#对象转换回XML文档的重要技术。这个过程对于数据交换、持久化存储和跨平台通信非常有用。以下是对".NET XML序列化为实体类与反序列化"这一...
在使用`.NET实体类编辑器`时,通常需要连接到目标数据库,选择要生成实体类的表,然后编辑器会根据表的字段信息自动生成包含属性和方法的实体类。这些属性对应数据库表的列,方法如`Save()`用于保存对象到数据库,`...
首先,让我们深入理解什么是C#中的类序列化。在C#中,序列化允许我们将对象实例转换为字节流,这可以是XML、JSON或其他二进制格式。这样做是为了持久化对象的状态,也就是将对象的所有属性和字段保存下来,即使程序...
该工具的核心功能在于,它允许用户直接输入或粘贴JSON字符串,然后自动生成对应的C#实体类代码,从而免去了手动编写这些类的繁琐工作。 首先,理解JSON实体类的概念是至关重要的。在C#中,一个JSON实体类通常是一个...
本文实例讲述了C#实现XML与实体类之间相互转换的方法。分享给大家供大家参考,具体如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System...
所有在反序列化Json字符串时需要一种通用的转换方式,而不是写死的某个类的反序列化,这里介绍的一种思路就是使用dynamic关键字来实现通用反序列化并比较反序列化后的对象是否深度相等即比较对象的各个字段是否相等...
- **抽象类继承实体类**:抽象类可以从实体类继承,实体类需具备显式定义的构造函数。 #### 4. 构造器的继承与重写 - **构造器特性**:构造器不能被继承,因此也不能被重写。 - **重载**:构造器可以通过参数的...
在.NET框架中,我们可以使用多种方式来实现这一过程,而"json直接转动态类型,反序列化避免新建实体类"就是一个高效且灵活的方法。 动态类型在C#中是一个强大的特性,它允许我们在运行时决定变量的类型。使用动态...
在这个例子中,我们利用反射实现了实体类与字符串的互转,这对于处理数据序列化、反序列化或者数据传输等问题非常有用。当然,这只是一个基础的实现,实际应用中可能需要考虑更多因素,例如异常处理、数据验证和性能...
它可能包含一个或多个实体类,一个反射辅助类用于执行CRUD操作,以及XML相关的序列化和反序列化代码。通过查看和学习这个示例,开发者可以更好地理解如何在实际项目中整合C#的反射和XML功能。 总结来说,"C#+实体类...
实体类转换成 JSON 字符串,将datatable转换为json,DataTable转换实体类
### C# 和 .Net 软件工程师面试知识点解析 #### 1. 类与结构的区别 - **定义**: - **类**:是引用类型,使用 `class` 关键字定义,支持继承,可以实现接口。 - **结构**:是值类型,使用 `struct` 关键字定义,...
这个压缩包文件“json转换c#实体类代码”提供了一个工具,能够帮助开发者快速便捷地将JSON字符串自动转化为C#实体类的源代码。 该工具名为“JsonCSharpClassGenerator”,其包含两个文件:JsonCSharpClassGenerator...
4. 输出:生成的C#实体类代码以文本形式展示给用户,用户可以选择复制到剪贴板或者保存为.cs文件。 对于C#开发者来说,这样的工具能够无缝集成到他们的开发流程中,尤其是在处理API响应或序列化/反序列化过程中。...
生成的C#实体类包含了XML元素和属性对应的字段和属性,它们都继承自`System.Xml.Serialization.XmlRootAttribute`或`System.Xml.Serialization.XmlTypeAttribute`,这使得我们可以使用.NET的XML序列化功能。...
本篇将重点介绍在C#中如何使用两种简单的方法对JSON进行序列化和反序列化:一种是基于Hashtable,另一种是使用实体类,并会提及到第三方库Newtonsoft.Json。 首先,我们来讨论使用Hashtable进行JSON序列化和解析。...
2. `Newtonsoft.Json.dll`:这是一个著名的.NET库,用于JSON序列化和反序列化。EasyCode可能使用它来处理JSON格式的数据,例如读取或写入配置文件,或者在生成代码时涉及JSON数据交换。 3. `EasyCode.exe` 和 `...
标题中提到的“C#实体类转换为JSON字符串”,主要涉及到`JsonConvert`类中的`SerializeObject`方法。以下是一个简单的例子,展示如何使用这个方法: ```csharp using Newtonsoft.Json; public class User { ...
利用JSON.NET制作的,对JSON文本进行序列化和反序列化操作的类,可反序列化成实体类或Dictionary,也可从类或Dictionary序列化成JSON文本