Сериализация VB.NET Отсутствует точка прямо перед сериализацией новой строки - PullRequest
0 голосов
/ 17 сентября 2009

Я уже некоторое время использую сериализацию XML, и сегодня я понял кое-что действительно странное. Если после «точки» (.) У меня появляется новая строка, то при десериализации я теряю точку. Кто-нибудь когда-нибудь случался с ними? Вот мой код сериализации:

Serialize

Dim xmlSerializer As New System.Xml.Serialization.XmlSerializer(GetType(SilverWare.Licensing.Common.StoreLicense), New System.Type() {GetType(SilverWare.Licensing.Common.StationLicense)})

        Dim gen As LicenseGenerator

        If store Is Nothing Then
            Throw New ArgumentNullException("store")
        ElseIf store.StationLicenses Is Nothing Then
            Throw New ArgumentNullException("store.StationLicenses")
        ElseIf store.StationLicenses.Length = 0 Then
            Throw New ArgumentOutOfRangeException("store.StationLicenses", "Must contain at least one element.")
        End If

        ' Create a license generator for issuing new license keys.
        gen = New LicenseGenerator(store)

        ' Generate store key.
        store.LicenseKey = gen.GenerateLicenseKey

        ' Generate individual station keys.
        For Each station In store.StationLicenses
            station.LicenseKey = gen.GenerateLicenseKey(station)
        Next

        ' Write license to file.
        Using xFile As Xml.XmlWriter = Xml.XmlWriter.Create(licenseFile)
            xmlSerializer.Serialize(xFile, store)

            xFile.Close()
        End Using

Deserialize

Dim xmlDeserializer As New System.Xml.Serialization.XmlSerializer(GetType(SilverWare.Licensing.Common.StoreLicense), New System.Type() {GetType(SilverWare.Licensing.Common.StationLicense)})
        Dim result As SilverWare.Licensing.Common.StoreLicense

        Using xFile As Xml.XmlReader = Xml.XmlReader.Create(licenseFile)
            result = DirectCast(xmlDeserializer.Deserialize(xFile), SilverWare.Licensing.Common.StoreLicense)

            xFile.Close()
        End Using

        Return result

Действительно забавная часть заключается в том, что если у меня после пробела есть пробел или я удаляю символ новой строки, проблем не возникает. Это происходит только в том случае, если это точка, которую я нахожу невероятной.

Вот краткий пример моего XML-файла, который был создан при сериализации:

 <?xml version="1.0" encoding="utf-8" ?> 
<StoreLicense xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
...
  <ReceiptAddress>98 N. Washington St.
Berkeley Springs West Virginia</ReceiptAddress> 
  <Name>Ambrae House at Berkeley Springs</Name> 
  <AliasName>Ambrae House</AliasName> 
  <Address1>98 N. Washington St.</Address1> 
  <Address2 /> 
...
</StoreLicense>

Строка, в которой возникла проблема, - это узел получения квитанции.

Ответы [ 2 ]

0 голосов
/ 23 января 2010

Так как я использовал кого-то еще, dll, я даже не думал, что это изменит мои данные, когда мы их импортируем. Происходило то, что у другого программиста был reg_ex, который искал точку перед новой строкой. Это была моя проблема и мое горе в течение 3 месяцев.

0 голосов
/ 18 сентября 2009

Этот пост в MSDN, кажется, отвечает на ваш вопрос.

MSDN: Serialize String, содержащий только пробелы, такие как символ ""

Из этого поста попробуйте это:

<XmlAttribute("xml:space")> _
Public SpacePreserve As [String] = "preserve"

Это создает корневой узел, подобный следующему:

<DataImportBase xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema" xml:space="preserve">

Jim

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...