Десериализация XML для объекта вызывает System.InvalidOperationException - PullRequest
0 голосов
/ 26 августа 2018

Я сериализовал PrinterSettings в строку, используя XMLSerializer.

Теперь, когда я пытаюсь десериализовать строку в PrinterSettings, я получаю

System.InvalidOperationException: Ошибка в XML-документе (10,4).Значение не может быть NULL.

Я сравнил сериализованную и десериализованную строку, они совершенно одинаковы, поэтому, должно быть, что-то не так с тем, как я пытаюсь десериализовать ее.

Кто-нибудь видит мою ошибку?

Dim nPrint As New PrinterSettings
Dim sTest As String = String.Empty

Dim nXSer1 As New XmlSerializer(GetType(PrinterSettings))
Using sw As New StringWriter
    nXSer1.Serialize(sw, nPrint)
    sTest = sw.ToString()
End Using

'just a test to see if it would work
Dim nXSer2 As New XmlSerializer(GetType(PrinterSettings))
Using sr As TextReader = New StringReader(sTest)
    Try
        nPrint = nXSer2.Deserialize(sr) 'raises error Error in XML-Document (10,4). The value may not be NULL.
    Catch ex As Exception
        Debug.Assert(False)
    End Try
End Using

1 Ответ

0 голосов
/ 27 августа 2018

PrintToFilename не может быть пустым.Когда я заполняю его произвольной строкой, это работает.Однако в сериализации XML настройки принтера пропущено много элементов, которые нельзя пропустить, если сериализовать с помощью двоичного сериализатора, что я и делаю сейчас:

Private Function SettingToString(ByVal settings As PrinterSettings) As String
    If settings Is Nothing Then Return Nothing
    Dim bf = New BinaryFormatter()

    Using ms = New MemoryStream()
        bf.Serialize(ms, settings)
        Return Convert.ToBase64String(ms.ToArray())
    End Using
End Function

Private Function SettingFromString(ByVal base64 As String) As PrinterSettings
    Try
        Dim bf As BinaryFormatter = New BinaryFormatter()

        Using ms = New MemoryStream(Convert.FromBase64String(base64))
            Return CType(bf.Deserialize(ms), PrinterSettings)
        End Using

    Catch __unusedException1__ As Exception
        Return New PrinterSettings()
    End Try
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...