将XML反序列化为对象会引发System.InvalidOperationException

时间:2018-08-26 17:14:48

标签: xml vb.net serialization

我已经使用PrinterSettingsXMLSerializer序列化为字符串。

现在,当我尝试将字符串反序列化为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 :(得分:0)

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