对象序列化:使用System.Xml.Serialization命名空间

it2022-05-08  7

要使用.NET进行对象的序列化,必须在解决方案中添加System.Xml的引用,并且在类文件中引入System.Xml.Serialization命名空间。这样就可以在文件中使用序列化所需要的各种特性了。 Imports  System.Xml.Serialization   如果对XML Serialization缺少了解,请首先参考拙文: 在.NET中实现对象序列化 <? xml version="1.0" encoding="utf-8" ?> < order  id =”123456”>       <orderDate > 2005-04-05 </ orderDate >        < items >            < item >                < name > 对象序列化 </ name >            </ item >        </ items >   </ order >    上面的例子包含了典型的XML中常见的各种元素:XML声明、XML根节点、XML节点、XML属性、XML集合。除XML声明外,在.NET中都有对应的特性用于定义这些元素。这些特性包括:XmlRootAttribute、XmlTypeAttribute、XmlElementAttribute、XmlAttributeAttribute、XmlArrayAttribute和XmlArrayItemAttribute。另外,还有两个常用的特性,XmlIgnoreAttribute用于标记在对象序列化时需要被忽略的部分,XmlIncludeAttribute用于标记在生成XML Schema时需要包括的类型。    如果没有显式地标记任何特性,那么默认类的特性为XmlTypeAttribute、类成员的特性为XmlElementAttribute,且名称为类或类成员的名称。例如: Public   Class Order Class Order         Public ID As String         Public OrderDate As String    End Class   如果不做任何特性标记,使用下面的代码序列化时:          Dim  o  As   New  Order          With  o             .ID  =   123456             .OrderDate  =   Date .Now.ToShortDateString          End   With          Dim  writer  As   New  XmlTextWriter( " abc.xml " , Encoding.UTF8)          Dim  serializer  As   New  XmlSerializer( GetType (Order))         writer.Formatting  =  Formatting.Indented         serializer.Serialize(writer, o)   序列化后的XML为: <? xml version="1.0" encoding="utf-8" ?> < Order  xmlns:xsd ="http://www.w3.org/2001/XMLSchema"  xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance" >    < ID > 123456 </ ID >    < OrderDate > 2005-4-11 </ OrderDate > </ Order >   可以看到,<Order>对应Order类,而<ID>和<OrderDate>分别对应Order类中的字段ID和OrderDate。另外,多了一个XML声明和两个XML命名空间。   XML声明是.NET自动添加的,但是encoding是在XmlTextWriter中指定的,如果不指定encoding,那么XML声明只有<?xml version="1.0"?>。我使用的是.NET 1.1,这个版本中只支持XML 1.0版本。另外,如果不指定encoding,那么默认的编码可能也是UTF8(没找到相关的资料)。   .NET默认为Order类添加了XMLSchema和XMLSchema-instance两个W3C的命名空间。该命名空间也可以自己指定,方法是使用XmlSerializer的另一个Serialize方法。              Dim  ns  As   New  XmlSerializerNamespaces             ns.Add( "" "" )             writer.Formatting  =  Formatting.Indented             serializer.Serialize(writer, o, ns)   要将类序列化为XML节点:      < XmlType( " order " ) >  _      Public   Class Order Class Order         ‘ any code here.     End Class   要将类序列化为XML根节点:      < XmlRoot( " order " ) >  _      Public   Class Order Class Order         ‘ any code here.     End Class   当在类中同时使用XmlRootAttribute、XmlTypeAttribute时,序列化文档中的类型以XmlRootAttribute为准:      < XmlRoot( " order " ), XmlType( " anotherOrderName " ) >  _      Public   Class Order Class Order         ‘ any code here.     End Class   要将类成员序列化为XML节点:          < XmlAttributeAttribute( " id " ) >  _          Public  ID  As   String   要将类成员序列化为XML属性:          < XmlAttributeAttribute( " id " ) >  _          Public  ID  As   String   要将类成员序列化为XML集合:      < XmlRoot( " order " ), XmlType( " anotherOrderName " ) >  _      Public   Class Order Class Order         <XmlAttributeAttribute("id")> _         Public ID As String         Public orderDate As String         <XmlArray("items"), XmlArrayItem("item", Type:=GetType(OrderItem))> _         Public Items As New ArrayList     End Class      < XmlType( " orderItem " ) >  _      Public   Class OrderItem Class OrderItem         Public Name As String     End Class   使用特性的一个好处是: 可以在代码和序列化的文档中使用不同的编码规范。

转载于:https://www.cnblogs.com/zsi/archive/2005/04/11/135665.html


最新回复(0)