VB.net中XML文件的序列化 [英] serialization of xml file in VB.net

查看:27
本文介绍了VB.net中XML文件的序列化的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下数据结构

Public Class MeasData
Public Number As Integer
Public Amp As Single
Public Fall As Single
Public Width As Single
Public setPRF As Integer
Public Volt As Single
Public setWidth As Single

串行化程序类代码

Public Class TestDataSerializer
Public PulsTestData As New List(Of PulserMeasData)
Private PulsTestDataSorted As New SortedList(Of Integer, PulserMeasData)

Public Sub AddPulsTestData(ByVal ChaNum As Integer,
                           ByVal PAmp As Single,
                            ByVal PFallTime As Single,
                            ByVal PWidth As Single,
                            ByVal setPrf As Integer,
                            ByVal setVoltage As Single,
                            ByVal setPulswidth As Single)

    Dim Data As New PulserMeasData(ChaNum, PAmp, PFallTime, PWidth, setPrf, setVoltage, setPulswidth)

    If PulsTestDataSorted.ContainsKey(ChaNum) Then
        PulsTestDataSorted(ChaNum) = Data
    Else
        PulsTestDataSorted.Add(ChaNum, Data)
    End If
    PulsTestData = PulsTestDataSorted.Values.ToList ' XML Serializer can not handle SortedLists
    Dim serializer As New XMLSerializer(GetType(List(Of PulserMeasData)))
    Using file As System.IO.FileStream = System.IO.File.Open("obj.xml", IO.FileMode.OpenOrCreate, IO.FileAccess.Write)
        serializer.Serialize(file, PulsTestData)
    End Using
End Sub

结束课程

我希望从上面的数据结构生成具有不同设置宽度PRF和电压值的XML

推荐答案

尝试以下内容:

Imports System.Xml
Imports System.Xml.Serialization
Module Module1
    Const INPUT_FILENAME As String = "c:	emp	est.xml"
    Const OUTPUT_FILENAME As String = "c:	emp	est1.xml"
    Sub Main()
        'read data
        Dim reader As XmlReader = XmlReader.Create(INPUT_FILENAME)
        Dim serializer As XmlSerializer = New XmlSerializer(GetType(PulserMeasDataPA))
        Dim PulserMeasDataPA As PulserMeasDataPA = serializer.Deserialize(reader)

        Dim writer As XmlWriter = XmlWriter.Create(OUTPUT_FILENAME)

        serializer.Serialize(writer, PulserMeasDataPA)

        Dim PulsTestData As New List(Of PulserMeasData)
        Dim PulsTestDataSorted As New SortedList(Of Integer, PulserMeasData)

        Dim newPulseData As New PulserMeasDataPA()
        Dim newListData As New List(Of TestData)
        newPulseData.TestData = newListData



        For Each PD In PulsTestDataSorted.GroupBy(Function(x) x.Key)
            Dim newTestData As New TestData()
            newListData.Add(newTestData)
            newTestData.PortNumber = PD.Key

            newTestData.MeasureValues = New List(Of MeasureValues)

            For Each testData In PD
                Dim newValues As New MeasureValues
                newTestData.MeasureValues.Add(newValues)

                newValues.Amplitude = testData.Value.Amplitude

            Next
        Next

    End Sub

End Module

Public Class PulserMeasData
    Public ChannelNumber As Integer
    Public Amplitude As Single
    Public Fall As Single
    Public Width As Single
    Public setPRF As Integer
    Public setVoltage As Single
    Public setWidth As Single
End Class

Public Class PulserMeasDataPA
    <XmlElement()>
    Public TestData As List(Of TestData)
End Class
Public Class TestData
    Public PortNumber As Integer
    <XmlArray("Measurement")>
    <XmlArrayItem("MeasureValues")>
    Public MeasureValues As List(Of MeasureValues)
End Class
Public Class MeasureValues
    Public Amplitude As String
    Public Fall As String
    Public Width As String
    Public setWidth As Decimal
    Public PRF As Decimal
    Public Volt As Decimal
End Class

这是我使用的XML文件

<?xml version="1.0" encoding="utf-8" ?>
<PulserMeasDataPA>
  <TestData>
    <PortNumber>1</PortNumber>
    <Measurement>
      <MeasureValues>
        <Amplitude></Amplitude>
        <Fall></Fall>
        <Width></Width>
        <setWidth>
          40</setWidth>
          <PRF>
            1000</PRF>
            <Volt>
              100</Volt>
            </MeasureValues>
      <MeasureValues>
        <Amplitude></Amplitude>
        <Fall></Fall>
        <Width></Width>
        <setWidth>
          100</setWidth>
          <PRF>
            1000</PRF>
            <Volt>
              100</Volt>
            </MeasureValues>
      <MeasureValues>
        <Amplitude></Amplitude>
        <Fall></Fall>
        <Width></Width>
        <setWidth>
          40</setWidth>
          <PRF>
            5000</PRF>
            <Volt>
              50</Volt>
            </MeasureValues>
      <MeasureValues>
        <Amplitude></Amplitude>
        <Fall></Fall>
        <Width></Width>
        <setWidth>
          100</setWidth>
          <PRF>
            5000</PRF>
            <Volt>
              50</Volt>
            </MeasureValues>
    </Measurement>
  </TestData>
  <TestData>
    <PortNumber>2</PortNumber>
    <Measurement>
      <MeasureValues>
        <Amplitude></Amplitude>
        <Fall></Fall>
        <Width></Width>
        <setWidth>
          40</setWidth>
          <PRF>
            1000</PRF>
            <Volt>
              100</Volt>
            </MeasureValues>
      <MeasureValues>
        <Amplitude></Amplitude>
        <Fall></Fall>
        <Width></Width>
        <setWidth>
          100</setWidth>
          <PRF>
            1000</PRF>
            <Volt>
              100</Volt>
            </MeasureValues>
      <MeasureValues>
        <Amplitude></Amplitude>
        <Fall></Fall>
        <Width></Width>
        <setWidth>
          40</setWidth>
          <PRF>
            5000</PRF>
            <Volt>
              50</Volt>
            </MeasureValues>
      <MeasureValues>
        <Amplitude></Amplitude>
        <Fall></Fall>
        <Width></Width>
        <setWidth>
          100</setWidth>
          <PRF>
            5000</PRF>
            <Volt>
              50</Volt>
            </MeasureValues>
    </Measurement>
  </TestData>
</PulserMeasDataPA>

这篇关于VB.net中XML文件的序列化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆