为啥我在 XML 反序列化函数中收到此错误?

Posted

技术标签:

【中文标题】为啥我在 XML 反序列化函数中收到此错误?【英文标题】:Why do I get this error at XML Deserialization function?为什么我在 XML 反序列化函数中收到此错误? 【发布时间】:2021-05-27 19:32:57 【问题描述】:

我创建了两个函数,XML 序列化和反序列化。 问题是我在反序列化时遇到错误。 您可以在下面找到这些功能:

public string Serialize(Object o)

    using (var writer = new StringWriter())
    
        new XmlSerializer(o.GetType()).Serialize(writer, o);
        return writer.ToString();
    


public PathDetailsMessage Deserialize(string xml)

    using (TextReader reader = new StringReader(xml))
    
         XmlSerializer serializer = new XmlSerializer(typeof(PathDetailsMessage));
         return (PathDetailsMessage)serializer.Deserialize(reader);
    

还有电话:

static void Main(string[] args)

    PathDetailsBLL train = new PathDetailsBLL();
    PathDetailsMessage pdm = train.GetDetails();
    string xml = train.Serialize(pdm);
    PathDetailsBLL dsa = new PathDetailsBLL();
    PathDetailsMessage fds = new PathDetailsMessage();
    fds = dsa.Deserialize(pdm.ToString());
    Console.Write(fds);
    Console.ReadKey();

return (PathDetailsMessage)serializer.Deserialize(reader);在线我收到以下错误:

System.InvalidOperationException: 'XML 文档 (1, 1) 中存在错误。'

XmlException:根级别的数据无效。第 1 行,位置 1。

你能帮帮我吗?

谢谢。

【问题讨论】:

这能回答你的问题吗? Deserialization error in XML document(1,1) 如果第一行的标签有命名空间,您可能会遇到命名空间问题。 【参考方案1】:
 fds = dsa.Deserialize(pdm.ToString());

您想反序列化 xml 变量,但使用 pdm.ToString() 代替。 试试

 fds = dsa.Deserialize(xml);

【讨论】:

谢谢!我很着急,似乎我使用了错误的变量。这帮助我解决了这个问题。【参考方案2】:

您似乎正在将train.GetDetails() 返回的对象序列化为XML 字符串xml,但您正在尝试反序列化pdm.ToString() 返回的字符串(不一定是XML 字符串)。您是否打算致电dsa.Deserialize(xml)

【讨论】:

感谢您的回答!这解决了我的问题。

以上是关于为啥我在 XML 反序列化函数中收到此错误?的主要内容,如果未能解决你的问题,请参考以下文章

XMLSerializer 不反序列化 XML

需要帮助将 XML 文件反序列化为对象 C#

C#中具有复杂元素的Xml反序列化[重复]

使用 Jackson 反序列化 JSON - 为啥 JsonMappingException“没有合适的构造函数”?

为啥spring boot可以在没有默认构造函数的情况下反序列化类?

为啥 Azure WebJob ServiceBus 默认反序列化 XML?