串行化XML(二)

原创 2004年03月09日 15:17:00

串行化XML() 可以知道XML的序列化(Serialization)。它是这样一个过程:得到一个对象,把对象转换为一个XML文档,并且保存它以供使用,或者把它传到网络上其他地方以供使用。在.NET中,XML serialization通过检查类的属性是否被标志为read/write来工作。只要有其中一个属性,该类的值就会被取出并插入到一个XML文档里去。反序列化(De-serialization)则是一个相反的过程。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 <?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />

将一个对象串行化为xml后,再并行化,使其还原为原来的对象有时,在并行的xml当中可能存在意外的xml节点。

如果不处理这些意外的xml 的节点,XmlSerializer将忽略这些意外的节点,如果要处理这些意外节点,可以使用XmlSerializer的一下事件进行处理:

¨         UnknownNode

¨         UnknownElement 

¨         UnknownAttribute    

¨         UnreferencedObject

现在将book.xml的格式更改为:

<?xml version="1.0" encoding="utf-8"?>

<Book id="001" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

       <BookID>1</BookID>

       <BookName>数学</BookName>

       <Exception>Some Text</Exception>

</Book>

我们增加了一些意外的节点、属性,然后执行并行化过程:

Dim serializer As New Xml.Serialization.XmlSerializer(GetType(bookShop))

        AddHandler serializer.UnknownAttribute, AddressOf myUnknownAttribute

        AddHandler serializer.UnknownElement, AddressOf myUnknownElement

        AddHandler serializer.UnknownNode, AddressOf myUnknownNode

        Dim reader As System.IO.StreamReader = New System.IO.StreamReader("E:/serializer/book.xml")

        Dim a As bookShop = CType(serializer.Deserialize(reader), bookShop)

        reader.Close()

        Console.WriteLine("BookShop Name:" & a.BookName)

        Console.WriteLine("BookShop ID:" & a.BookID)

        Console.WriteLine("Print Enter to Exit.............")

        Console.ReadLine()

      我们同样增加了意外节点、属性的处理代码,执行结果为:

       

这样我们就可以查看那些意外的节点、属性的信息了。

    另外,我们还可以灵活的控制串行化xml 的格式,这样可以很方便的与外部应用程序进行交换对象。我们可以在类中加入.NET Framework属性来控制串行化xml 的格式。

       Imports System.Xml

Imports System.Xml.Serialization

<XmlRoot(elementname:="Root_Book", namespace:="URI:MylocalURI")> _

Public Class Book

    <XmlElement(elementname:="Book_ID", namespace:="URI:MylocalURI")> Public BookID As Integer

    <XmlAttributeAttribute(AttributeName:="Name")> _

    Public BookName As String

    <XmlText()> _

    Public test_Text As String

    <XmlIgnore()> _

Public IgnoreText As String

‘IgnoreText 将不被串行化

End Class

Module Serialization

    <STAThread()> _

   Public Sub main()

        Dim book As New book

        book.BookID = 1

        book.BookName = "数学"

        book.test_Text = "Some Text"

        book.IgnoreText = "IgnoreText"

        Dim serializer As New Xml.Serialization.XmlSerializer(GetType(book))

        Dim writer As System.IO.StreamWriter = New System.IO.StreamWriter("E:/serializer/book.xml")

        serializer.Serialize(writer, book)

        writer.Close()

    End Sub

End Module

则生成的XML格式为:

<?xml version="1.0" encoding="utf-8"?>

<Root_Book xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="数学" xmlns="URI:MylocalURI">

       <Book_ID>1</Book_ID>

Some Text

</Root_Book>

 

    

串行化XML(一)

.NET Framework 对创建分布式应用程序和服务提供了广泛的、可扩展的支持。当创建一个分布式系统时,一个必须要解决的问题就是如何获得从系统的一部分到另一部分的对象。为了满足这一机制的需求,.N...
  • guoyan19811021
  • guoyan19811021
  • 2004年03月09日 10:22
  • 1187

XMLDecoder 对xml文档的解析代码!

public Object readObject() {  if (in == null) {     return null; }        if (handler == null) {    ...
  • zhangyu6050
  • zhangyu6050
  • 2004年12月28日 09:58
  • 1209

串行化XML

XML的魅力    串行化XML是指为了方便存储或传输,把一个对象的公共的域和属性保存为一种串行格式(这里是XML格式)的过程。非串行化则是使用串行的状态信息将对象从串行XML状态还原成原始状态的过程...
  • snlei
  • snlei
  • 2010年06月01日 10:21
  • 1082

xml串行化

        public void 对象XML化()        ...{            Object o = new Object();            System.IO.Te...
  • hanhenry
  • hanhenry
  • 2007年08月09日 10:57
  • 392

串行化和并行化

 System.SerializableAttribute串行化是指存储和获取磁盘文件、内存或其他地方中的对象。在串行化时,所有的实例数据都保存到存储介质上,在取消串行化时,对象会被还原,且不能与其原...
  • fireswolfs
  • fireswolfs
  • 2007年01月13日 20:35
  • 968

PHP对象的串行化与反串行化

什么时候使用串行化? 在网络中传输对象的时候 向数据库中保存文件的时候   今天我们要提到四个函数 全部串行化 1.serialize(对象名) 将指定的类对象串行化  $str=seri...
  • jt521xlg
  • jt521xlg
  • 2012年05月04日 17:24
  • 4560

Java 对象串行化

在前面我们学习了用一些特定的方法可以将int,double等类型的数据进行输入输出处理。现在假设我们有一个Student类,每个Student对象包含了姓名,语文,数学,英语的成绩。姓名是String...
  • mengzhejin
  • mengzhejin
  • 2014年07月11日 15:16
  • 806

Qt串行化的输入和输出

参考https://lug.ustc.edu.cn/sites/qtguide/ 串行化(Serialization)是计算机科学中的一个概念,它是指将对象存储到介质(如文件、内存缓冲区等)中或是以二...
  • guoqianqian5812
  • guoqianqian5812
  • 2016年03月05日 18:55
  • 1068

MFC串行化原理

MFC串行化原理 作者:flyfish 2014-2-8 简介   本文章源码分析MFC的版本是10.0(VC2010) 串行化Serialization简单说就是在程序中定义的对象转换成连续...
  • flyfish1986
  • flyfish1986
  • 2014年02月08日 18:57
  • 2936

【mysql】串行化隔离级别

串行化隔离级别是最严格的隔离级别,所谓串行话,指的是两个事务t1和t2,最终执行的结果与先执行t1在执行t2或者先执行t2再执行t1的结果一样。这个如何实现?最简单的方式叫做两段式锁。 定义了两种锁...
  • u010900754
  • u010900754
  • 2017年09月27日 06:23
  • 100
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:串行化XML(二)
举报原因:
原因补充:

(最多只允许输入30个字)