一 : 利用XMLSerializer将对象串行化到XML
微软已经意识到串行化数据的重要性,因此在.NET框架中包含了命名空间System.Runtime.Serialization和System.Xml.Serialization以提供串行化功能,为用户自己编写串行化方法提供了一个框架。System.Xml.Serialization命名空间提供了将一个对象串行化为XML格式的基本方法。下面我们来看看如何使用这种方法。
XML的魅力
串行化XML是指为了方便存储或传输,把一个对象的公共的域和属性保存为一种串行格式(这里是XML格式)的过程。非串行化则是使用串行的状态信息将对象从串行XML状态还原成原始状态的过程。因此,可以把串行化看作是将对象的状态保存到流或缓冲区中的一种方法。
串行化的目的是数据存储和数据转换。数据存储指的是在用户会话时保存数据。当应用程序关闭时,数据被保存(串行化),而当用户回来时,数据又被重新加载(非串行化)。数据转换指将数据变换成能被另一个系统识别的格式。使用串行化和XML,可以很方便的进行数据转换。
对象中的数据可以是类、方法、属性、私有类型、数组,在System.Xml.XmlElement或System.Xml.XmlAttribute对象中,它甚至可以是内嵌的XML。
System.Xml.Serialization命名空间中的关键类是XmlSerializer。当然在该命名空间中还包括有关XML其他方面以及SOAP相关的其他类,不过我们的重点是XmlSerializer类。
XmlSerializer
XmlSerializer类提供了把对象串行化为XML文件及把XML文档非串行化为对象的方法。它还能让用户指定对象如何转化为XML。可以把将被串行化的对象的类型作为类构造函数的参数。下面的C# 代码说明了构造函数的用法。
XmlSerializer ser = new XmlSerializer(typeof(objectToSerialize)); |
下面是等价的VB.NET代码:
Dim ser As New XmlSerializer(GetType(objectToSerialize)) |
实际的串行化过程在XmlSerializer类的Serialize方法中实现。该方法允许在串行化过程中调用TextWriter、Stream和XmlWriter对象。下面的例子代码说明了如何调用该方法。在本例中一个对象被串行化保存到本地磁盘的一个文件当中。例子中首先是类声明,后面紧接着是串行化源代码。
using System; namespace BuilderSerialization { public class Address { public Address() {} public string Address1; public string Address2; public string City; public string State; public string Zip; public string Country; } } using System; namespace BuilderSerialization { public class Author { public Author() { } public string FirstName; public string MiddleName; public string LastName; public string Title; public string Gender; public Address AddressObject; } } namespace BuilderSerialization { public class Book { public Book() { } public string Title; public Author AuthorObject; public string ISBN; public double RetailPrice; public string Publisher; }} using System; using System.Xml.Serialization; using System.IO; namespace BuilderSerialization { class TestClass { static void Main(string[] args) { Book BookObject = new Book(); XmlSerializer ser = new XmlSerializer(typeof(Book)); TextWriter writer = new StreamWriter("booktest.xml"); BookObject.Title = "Practical LotusScript"; BookObject.ISBN = "1884777767 "; BookObject.Publisher = "Manning Publications"; BookObject.RetailPrice = 43.95; BookObject.AuthorObject = new Author(); BookObject.AuthorObject.FirstName = "Tony"; BookObject.AuthorObject.LastName = "Patton"; BookObject.AuthorObject.Gender = "Male"; BookObject.AuthorObject.AddressObject = new Address(); BookObject.AuthorObject.AddressObject.Address1 = "1 Main Street"; BookObject.AuthorObject.AddressObject.City = "Anywhere"; BookObject.AuthorObject.AddressObject.State = "KY"; BookObject.AuthorObject.AddressObject.Zip = "40000"; BookObject.AuthorObject.AddressObject.Country = "USA"; ser.Serialize(writer, BookObject); writer.Close(); } } } |
上面的代码把三个对象变为一个对象,因此在串行化过程中产生一个XML文件。以下是例子程序产生的XML文档:
|
注意串行化过程也能处理对象数据的嵌套。数据被转换成可识别的格式,方便了数据重载(非串行化)以及向另一个系统的数据传输。在数据传输过程时,接收方系统需要知道XML文件的格式(如果预先不知道的话)。因此需要提供一个XML schema文件。.NET框架中的XSD.exe工具可以为串行化XML生成一个schema文件。
下面是用VB.NET编写的例子代码:
Public Class Address |
控制输出
串行化过程生成标准的XML文件,数据成员转换为XML元素。不过,并非所有的数据成员都变成元素,可以通过在类代码中添加一些标记来控制输出的XML文件。这样,数据成员可以变换为XML属性而非元素,也可以简单的被忽略掉。下面的例子是一段经过修改后的book类VB.NET代码。
Public Class Book |
这段代码告诉系统在生成XML文件时把类成员ISBN作为XML属性,同时忽略掉RetailPrice成员。这种变化可以在生成的XML文件中可以看出:
<?xml version="1.0" encoding="utf-8"?> |
以下是相应的C# 代码:
public class Book { |
上面仅是稍微提了两种标记符号。请查阅.NET文档以获得完整的标记符号。
非串行化
非串行化数据通过调用XmlSerializer类的Deserialize方法可以方便地实现。以下的VB.NET程序片断完成上文中XML文档的非串行化:
Dim BookObject As New Book |
该程序把结果数据放入内存备用。下面是等价的C# 代码:
XmlSerializer ser = new XmlSerializer(typeof(Book)); |
---------------------------------------------------
作者简介:Tony Patton是一名专业应用程序开发人员,知识面广泛,获得了Java、 VB、 Lotus和XML认证。
二 : 对于采药来说到后面.什么药实用比较多?比如象 &nbs
对于采药来说到后面.什么药实用比较多?
比如象 梦叶草 .......一些....
到底60后什么草药的需求比较大
这些草药在什么地方比较多
可以采到
知道的大侠们 指教下
高级的黑莲花,山鼠,梦叶草,格罗姆之血,瘟疫花,幽灵菇 .
中级药草枯叶草,墓地苔.
低级的雨燕草(石南和魔皇伴生,做迅捷药水和菊花茶).
所有高级药草在厄运竞技场都会出。贼是采这个的好手。
三 : C# 中的未将对象引用设置到对象的实例
我在项目下的ConnectionClass中的代码如下:四 : Error:未将对象引用设置到对象的实例
出现“未将对象引用设置到对象的实例”错误的一般原因:
1、ViewState 对象为Null。
2、DateSet 为空。
3、sql语句或Datebase的原因导致DataReader空。
4、声明字符串变量时未赋空值就应用变量。
5、未用new初始化对象。
6、Session对象为空。
7、对控件赋文本值时,值不存在
8、使用Request.QueryString()时,所获取的对象不存在,或在值为空时未赋初始值
9、使用FindControl时,控件不存在却没有做预处理
10、重复定义造成未将对象引用设置到对象的实例错误
二、
(1)所设置的变量为空值或没有取到值,一般出现在传递参数的时候出现这个问题,也会在使用DataGrid或Gridview或Datalist等数据控件时出现.
(2)控件名称与codebehind里面的没有对应
(3)未用new初始化对象
(4)在程序中所引用的控件不存在
解决方法:
(1)使用try..catch...finally捕捉错误,或直接用response.write()输出所取的变量值
(2)查看代码中是否存在未初始化的变量
三、
SqlConnection.Open未将对象引用设置到对象的实例
在使用VS2003开发ASP.NET程序时候有时候操作SqlConnection对象的Open()方法时候会出现
未将对象引用设置到对象的实例。
说明:执行当前Web请求期间,出现未处理的异常。检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
conn.Open();
跟踪调试也肯定可以确定对conn进行new操作但是程序经常在这个地方报错,但是有时候重启服务器或者重启IIS有能正常使用了。怎么调试也找不到问题那么这个时候可能是你本机上安装的.NETFRAMEEWORK框架有问题,可能没有没有安装SP1.1补丁
解决方法:打NETFRAMEEWORK1.1SP1的补丁(微软官方网站下载安装)
四、出现NullReferenceException异常
1、对象所在的命名空间没有引用
2、对象没有实例化
3、出现异常,实例化失败对象为null
五、IIS
当应用程序的用户访问量超过它能承受的范围之后,就会出错。
改善程序,使用缓存,尽量减少与数据库交互的次数。
六、重置了DataSet引用,会出现问题,检查自己的代码,是不是在其他地方重新引用了,可能DataSet被设置成全局对象。
七、当以上所有的方法不行时,打上.netframework的补丁
八、还可能网站里面DAL的dll文件失效,业务层实例化不了IDAL
九、
为每个可疑的地方添加监视,替换掉页面级全局对象
本文由百分网提供,原文地址:
自己错误原因:不够细心,打错了代码
五 : Xap 包装失败。未将对象引用设置到对象的实例。 解决办法
我在编译 Windows Phone Toolkit 时.(从网上直接下来的源码.)
遇到了 Xap 包装失败。未将对象引用设置到对象的实例。
这个的错误.
耽误大半天时间才到到原来是图片文件中有一个图片不存在了.还有一个"引用"
删除即可.
当然这不仅限于此项目.遇到这个提示请检查一下文件是否有缺失.
如果帮到你,顶一下哦!
摘自 蝗虫的大腿
扩展:未将对象引用到实例 / 网上报税引用对象实例 / 未将对象引用实例
本文标题:未将对象引用设置到对象的实例-利用XMLSerializer将对象串行化到XML61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1