XML文档中的错误(2,2)

时间:2012-05-24 12:53:19

标签: c# xml-serialization

我有一些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)。 ---&GT; System.InvalidOperationException:是的   没想到。在   Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReadermessageType. Read161_message()   ---内部异常堆栈跟踪结束---在System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader)   xmlReader,String encodingStyle,XmlDeserializationEvents事件)at   System.Xml.Serialization.XmlSerializer.Deserialize(TextReader的   textReader)at CCR2BB.frmMain.BWConvertProcess_DoWork()

3 个答案:

答案 0 :(得分:13)

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

EG:

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

答案 1 :(得分:3)

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

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提供更多文档。

答案 2 :(得分:0)

你从哪里获得了'messageType'这个类?

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

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

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

删除此designer.cs文件,该文件具有从DataSet派生的类,我能够解决此错误。