2009-11-25 4 views
1

내가 잘못하고있는 것을 보지 못했습니다. 무슨 일이 있었는지 확인하기 위해 XML을 읽은 후에 (나는 XML이 무엇인지 확인했다) 생성자 값을 "TEST"로 변경했다. 클래스 값은 여전히 ​​"TEST"에 고정되어있다. 더 이상 아이디어가 없습니까? 나는 잘 작동하는 또 다른 수업에서 이미이 과정을하고 있으며, 나도 동료들도 그 차이점을 발견 할 수 없었다.XML 역 직렬화가 클래스 값을 설정하지 않음

XML :

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

등급 (class) :합니다 (들은 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은이 코드에서 생성되지 않은 것처럼 보입니다.이 클래스를 serialize하여 생성 된 XML과 비교하는 것이 도움이됩니까? – Nestor

+0

나쁜 생각은 아니지만 왜 그런 생각을하지 않았는지 확신 할 수 없습니다. 나를 만났을 때 무슨 일이 일어나는지보십시오. – RiddlerDev

+0

이것은 질문과 관련이 없지만,'System.Xml.Serialization'에 대해''속성이 필요 없습니다. – MarkJ

답변

1

좋아, @ maxc의 제안을 사용하여 클래스의 serialization을 시도하고 모자를 제외하고 다른 것을 보았다. 내 XML 속성 대 내 속성의 이탤릭체. 이 물건이 대소 문자를 구분하지 않는다고 생각하지 않았습니까? 그러나 사례를 일치하도록 변경했을 때 작동하고 심지어 확인하기 위해 앞뒤로 변경했습니다.

이상한가요?

+0

전혀 이상하지 않지만 Xml은 대소 문자를 구분합니다. – CaffGeek

+0

예 XML은 있지만 VB.Net은 그렇지 않습니다. VB.Net 라이브러리가 오래되었다는 것은 "그렇지 않습니까?"입니다. – RiddlerDev

관련 문제