2009-11-25 85 views
1

我没有看到我做错了什么。为了看看正在做什么,我在将XML读入(我验证了XML是什么)后,将构造函数值更改为“TEST”,类值仍然保留为“TEST”。更多想法?我已经在另一个课上做这个过程,这个过程很好,无论是我还是一些同事都可以找到差异。XML反序列化不设置类值

XML:

<IntervalTranslatorScrubberSetting> 
    <LINEINDICATOR_USAGE>USG</LINEINDICATOR_USAGE> 
    <FILETYPE>867</FILETYPE> 
    <ESIDUNS>8417397824</ESIDUNS> 
</IntervalTranslatorScrubberSetting> 

类:(试过没有的XMLElement,并使用XMLAttribute尝试只是为了看看,没有变化)

Imports System.Xml.Serialization 

Namespace Workers.Scrubber 
    <Serializable()> _ 
    Public Class IntervalTranslatorScrubberSetting 

#Region "Private Variables" 
     Private _ESIDuns As String 
     Private _FileType As String 
     Private _LineIndicator_Usage As String 
#End Region 

#Region "Constructors" 
     Sub New() 
      Me.ESIDuns = "TEST" 
      Me.FileType = "TEST" 
      Me.LineIndicator_Usage = "TEST" 
     End Sub 
#End Region 

#Region "Serialization" 
     Private _SerializMe As New XML(Of IntervalTranslatorScrubberSetting) 

     Public Function Serialize(ByVal XMLObject As IntervalTranslatorScrubberSetting) As String 
      Return _SerializMe.Serialize(XMLObject) 
     End Function 

     Public Function Deserialize(ByVal XML As String) As IntervalTranslatorScrubberSetting 
      Return _SerializMe.Deserialize(XML) 
     End Function 
#End Region 

#Region "Properties" 
     <XmlElement()> _ 
     Public Property ESIDuns() As String 
      Get 
       Return _ESIDuns 
      End Get 
      Set(ByVal value As String) 
       _ESIDuns = value 
      End Set 
     End Property 

     <XmlElement()> _ 
     Public Property FileType() As String 
      Get 
       Return _FileType 
      End Get 
      Set(ByVal value As String) 
       _FileType = value 
      End Set 
     End Property 

     <XmlElement()> _ 
     Public Property LineIndicator_Usage() As String 
      Get 
       Return _LineIndicator_Usage 
      End Get 
      Set(ByVal value As String) 
       _LineIndicator_Usage = value 
      End Set 
     End Property 
#End Region 
    End Class 
End Namespace 

XML处理类:

Imports System.IO 
Imports System.Xml 

Public Class XML(Of T) 
    Private _serializer As New System.Xml.Serialization.XmlSerializer(GetType(T)) 

    Public Function Serialize(ByVal myobject As T) As String 
     'serialise to a memory stream, then read into a string 
     Try 
      Dim result As String = Nothing 
      If myobject IsNot Nothing Then 
       Using ms As New MemoryStream 
        Using xtw As New XmlTextWriter(ms, System.Text.Encoding.UTF8) 
         xtw.Formatting = Formatting.Indented 
         _serializer.Serialize(xtw, myobject) 
         'rewind 
         ms.Seek(0, System.IO.SeekOrigin.Begin) 
         Using reader As New StreamReader(ms, Text.Encoding.UTF8) 
          result = reader.ReadToEnd() 
          xtw.Close() 
          reader.Close() 
         End Using 
        End Using 
       End Using 
      End If 
      Return result 

     Catch ex As Exception 
      Throw 
     End Try 
    End Function 

    Public Function Deserialize(ByVal xml As String) As T 
     Try 
      'default to no object 
      If Not String.IsNullOrEmpty(xml) Then 
       Using sr As New StringReader(xml) 
        Return CType(_serializer.Deserialize(sr), T) 
       End Using 
      Else 
       Return Nothing 
      End If 

     Catch ex As Exception 
      Throw 
     End Try 
    End Function 
End Class 
+2

无法立即看到问题。您提供的XML看起来好像不是由此代码生成的 - 将它与通过序列化此类所生成的XML进行比较会有帮助吗? – Nestor 2009-11-26 00:47:18

+0

不是一个坏主意,不知道为什么我没有想到这一点。让我见识一下,看看它做了什么。 – RiddlerDev 2009-11-26 01:02:27

+0

这与问题无关,但您不需要System.Xml.Serialization的''属性 – MarkJ 2009-11-26 09:36:26

回答

1

好吧,用@maxc的建议,我尝试了课程的序列化,除了帽子以外没有什么不同将我的XML属性与我的属性相区分。我不认为这个东西是区分大小写的?但是当我改变它以使它们的案例匹配时,它可以工作,甚至可以来回更改以确认。

奇怪吗?

+0

Xml不区分大小写。 – CaffGeek 2010-06-28 20:50:24

+0

是的XML是,但VB.Net不是,希望是。 VB.Net库的老化是“是或者否”。 – RiddlerDev 2010-07-09 16:32:19