Использование .Net XmlSerialize для строк со встроенным <cr><lf> теряет <cr>при десериализации - PullRequest
1 голос
/ 13 октября 2009

Следующий (бездонный) код демонстрирует, как стандартная сериализация / десериализация в VB теряет CR при десериализации. Это можно преодолеть, применив XmlAttribute (DataType: = "string") "к описанию. Почему он это делает? Я хотел бы исправить это, не применяя 'LF' -> 'CR''LF' в каждом затронутом классе. Это исправляет ошибку в существующих XML-файлах, созданных без XmlAttribute!

  Imports System.Xml.Serialization
  Imports System.Xml
  Imports System.IO

  Public Class Form1

    Public Class MyObject
      Public Description As String
    End Class

    Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click

      Dim x As New MyObject
      x.Description = "Hello" + vbCrLf + "World"
      Dim serializer As New XmlSerializer(GetType(MyObject))
      Dim writer As StreamWriter = New StreamWriter("c:\temp\test.xml")
      serializer.Serialize(writer, x)

      writer.Close()

      For i As Integer = 0 To x.Description.ToCharArray.Length - 1
        Debug.Print(Asc(x.Description.ToCharArray(i, 1)))
      Next

      Debug.Print("**********************")

      Dim reader As New StreamReader("c:\temp\test.xml")

      Dim newObj As MyObject = CType(serializer.Deserialize(reader), MyObject)

      For i As Integer = 0 To newObj.Description.ToCharArray.Length - 1
        Debug.Print(Asc(newObj.Description.ToCharArray(i, 1)))
      Next

    End Sub
  End Class

1 Ответ

1 голос
/ 15 октября 2009

Взгляните на XML-десериализацию, «стандартизирующую» окончания строк, как это остановить? (.NET) . Этот солутон соответствует тому, что вы пытаетесь сделать?

...