【vb.net】System.Xml序列化与反序列

本文介绍了如何利用System.Xml.Serialization在VB.NET中进行XML的序列化和反序列化操作。首先,根据XML结构创建对象,并添加必要的标记。接着,详细阐述了如何读取XML文件生成XmlDoc对象,以及如何将XmlDoc对象保存回XML文件,提供了一种静态函数的封装方法来实现这一过程。

利用System.Xml.Serialization进行序列化与反序列化操作

System.Xml.Serialization能够很方便地将XML文件转换为对象,或者将对象转换为XML文件。

假设:我们有下列这样的一段XML

<XML>
    <S1 A1="" A2="" A3="" />
    <S2 B1="" B2="">
        <O C1="" C2=""/>
        <O C1="" C2=""/>
        <O C1="" C2=""/>
        ...
    </S2>
</XML>

1.根据XML的结构创建对象

Public Class XmlDoc
    Public Property Node1 As S1
    Public Property Node2 As S2
End Class

Public Class S1
    Public Property A1 As String
    Public Property A2 As String
    Public Property A3 As String
End Class

Public Class S2
    Public Property B1 As Double
    Public Property B2 As Integer
    Public Property olist As List(Of O)
End Class

Public Class O
    Public Property C1 As String
    Public Property C2 As String
End Class

2.添加标记

注:当节点名称与变量名称相同时,可以省略(xxxName="xx")


<XmlType(TypeName:="XML")>
Public Class XmlDoc
    <XmlElement(ElementName:="S1")>
    Public Property Node1 As S1
    <XmlElement(ElementName:="S2")>
    Public Property Node2 As S2
End Class

Public Class S1
    <XmlAttribute>
    Public Property A1 As String
    <XmlAttribute>
    Public Property A2 As String
    <XmlAttribute>
    Public Property A3 As String
End Class

Public Class S2
    <XmlAttribute>
    Public Property B1 As Double
    <XmlAttribute>
    Public Property B2 As Integer
    <XmlElement(ElementName:="O")>
    Public Property olist As List(Of O)
End Class

Public Class O
    <XmlAttribute>
    Public Property C1 As String
    <XmlAttribute>
    Public Property C2 As String
End Class

3.读取XML文件并返回XmlDoc对象。

我们先封装一个静态函数

Public Shared Function Load(ByVal filePath As String, ByVal objectType As Type) As Object
    Try

        Using reader As System.IO.StreamReader = New System.IO.StreamReader(filePath)
            Dim xs As System.Xml.Serialization.XmlSerializer = New System.Xml.Serialization.XmlSerializer(objectType)
            Dim ret As Object = xs.Deserialize(reader)
            Return ret
        End Using

    Catch ex As Exception
        Return Nothing
    End Try
End Function

调用Load函数将读取XML文件并返回XmlDoc对象

Dim doc As XmlDoc
Dim path As String = "test.xml"
doc = CType(Load(path, GetType(XmlDoc)), XmlDoc)

4.将XmlDoc对象保存为XML文件

Public Shared Function Save(ByVal filePath As String, ByVal XMLObject As Object) As Boolean
    Try
        Dim ser As XmlSerializer = New XmlSerializer(XMLObject.[GetType]())
        Dim writer As TextWriter = New StreamWriter(filePath)
        Dim ns As XmlSerializerNamespaces = New XmlSerializerNamespaces()
        ns.Add("", "")
        ser.Serialize(writer, XMLObject, ns)
        writer.Close()
        Return True
    Catch ex As Exception
        Return False
    End Try
End Function

调用Save函数,将XmlDoc保存为Xml

Dim doc As XmlDoc = New XmlDoc()
Dim path As String = "test.xml"
Save(path, doc)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值