XML 文档 (2,2) 中出现错误

本文关键字:错误 文档 XML | 更新日期: 2023-09-27 18:35:17

我有一些xml文件,我正在尝试在给定的代码中按如下方式反序列化。

using (StreamReader srFileContent = new StreamReader(filePath))  
{
    XmlSerializer serializer = new XmlSerializer(typeof(messageType));   
    messageType objMessage = (messageType)serializer.Deserialize(srFileContent);  
}

此处位于 filePath 的文件不包含以下行

<?xml version="1.0"?>
<message xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema">

这就是我收到错误的原因。你能帮我如何在反序列化给定文件的流之前添加此行运行时吗?

错误给出如下:

System.InvalidOperationException: XML 文档中存在错误 (2, 2).---> System.InvalidOperationException: was 没想到。在 Microsoft.Xml.Serialization.Generated Assembly.XmlSerializationReadermessageType. Read161_message() --- 在 System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader ---结束内部异常堆栈跟踪 xmlReader, String encodingStyle, XmlDeserializationEvents events) at System.Xml.Serialization.XmlSerializer.Deserialize(TextReader textReader) at CCR2BB.frmMain.BWConvertProcess_DoWork()

XML 文档 (2,2) 中出现错误

您必须查看基本异常才能找出问题所在。捕获的异常可能包含 4 个或更多内部异常。

例如:

try
{
  ...
}
catch (Exception ex)
{
  Console.WriteLine(ex.GetBaseException());
}

另一个问题的解决方案是:

XmlRootAttribute xRoot = new XmlRootAttribute();
xRoot.ElementName = "message";
// xRoot.Namespace = "http://www.cpandl.com";
xRoot.IsNullable = true;
XmlSerializer xs = new XmlSerializer(typeof(messageType),xRoot);

也许这是解决您问题的一种方法。由于 MSDN 已关闭我的网络,因此我无法再提供 XmlRootAttribute 的文档。

你从哪里得到类'messageType'?

如果使用 xsd 为 xml 创建了 xsd.exe然后使用 xsd 创建了此类。

然后你的项目将有两个包含此类的文件。

  • 其中一个文件是designer.cs其中包含从DataSet类派生的此类
  • 一个文件只是一个具有分部类的.cs文件。
  • 当你在反序列化时使用这个类时,它将引用来自 designer 的类.cs该类派生自 DataSet
  • 但是,如果从项目中删除 designer.cs,则代码将引用.cs文件中的分部类。

通过删除这个设计器.cs文件,该文件具有从DataSet派生的类,我能够解决此错误。

我认为您必须为类messageType声明XmlRootAttribute。 例如,

[System.Xml.Serialization.XmlRootAttribute(ElementName = "message", IsNulable=false)]
public class messageType 
{
...
}