【问题标题】:Deserializing XML to object raises System.InvalidOperationException将 XML 反序列化为对象会引发 System.InvalidOperationException
【发布时间】:2018-08-26 17:14:48
【问题描述】:

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

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

【问题讨论】:

  • 10,4 表示它在 xml 文件的第 10 行字符 4 上。您是否对已序列化的文件进行反序列化?我唯一一次看到反序列化来自序列化的 xml 的问题是命名空间不匹配。
  • @jdweng 我已经编辑了我的帖子并插入了字符串(序列化和反序列化都相同)。

标签: xml vb.net serialization


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2020-05-10
    • 1970-01-01
    • 2014-11-30
    • 1970-01-01
    • 1970-01-01
    • 2013-12-16
    • 1970-01-01
    相关资源
    最近更新 更多