我已经使用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
答案 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