C# 反序列化时出现InvalidoperationException

C# 反序列化时出现InvalidoperationException,c#,serialization,C#,Serialization,我想将XML反序列化为一个对象,但不断出现以下异常 System.InvalidOperationException: There is an error in XML document (0, 0). ---> System.Xml.XmlException: Root element is missing. at System.Xml.XmlTextReaderImpl.Throw(Exception e) at System.Xml.XmlTextReaderImpl.

我想将XML反序列化为一个对象,但不断出现以下异常

System.InvalidOperationException: There is an error in XML document (0, 0).     ---> System.Xml.XmlException: Root element is missing.
   at System.Xml.XmlTextReaderImpl.Throw(Exception e)
at System.Xml.XmlTextReaderImpl.ParseDocumentContent()
at System.Xml.XmlTextReaderImpl.Read()
at System.Xml.XmlTextReader.Read()
at System.Xml.XmlReader.MoveToContent()
at   Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderBAObjectSchema.Read18_BAObjectSchema()
   --- End of inner exception stack trace ---
   at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)
   at System.Xml.Serialization.XmlSerializer.Deserialize(TextReader textReader)
   at Siemens.BASys.BAObjectCreator.SchemaHandler.Deserialize[T](String path, Boolean throwException) in ....\SchemaHandler.cs:line 34
我正在使用的代码

` public static T Deserialize<T>(string path, bool throwException)
    {

        T root = default(T);
        try
        {
            using (FileStream fs = new FileStream(path, FileMode.Open))
            {
                using (TextReader reader = new StreamReader(fs))
                {
                    //XmlSerializer serializer = new XmlSerializer(typeof(T));
                    XmlSerializer serializer = new XmlSerializer(typeof(T));
                    root = (T)serializer.Deserialize(reader);
                }

            }
        }
        catch (Exception e)
        {
            System.Diagnostics.Debug.WriteLine(e.ToString());
        }
        return root;
    }`
`public static T反序列化(字符串路径,bool throweexception)
{
T根=默认值(T);
尝试
{
使用(FileStream fs=newfilestream(路径,FileMode.Open))
{
使用(TextReader=new StreamReader(fs))
{
//XmlSerializer serializer=新的XmlSerializer(typeof(T));
XmlSerializer serializer=新的XmlSerializer(typeof(T));
root=(T)序列化程序。反序列化(读取器);
}
}
}
捕获(例外e)
{
System.Diagnostics.Debug.WriteLine(如ToString());
}
返回根;
}`
我使用的XML看起来是正确的,但不确定为什么会出现错误

下面是XML的示例部分

<?xml version="1.0" encoding="utf-8"?>
<ObjectSchema>
  <Controllers>



  </Controllers>
</ObjectSchema>

任何帮助都将不胜感激


谢谢

代码和XML没有问题。发生这种情况的原因是
StreamReader
。一旦流达到EOF,则流仅为前向模式读取器。XMLSerializer在尝试读取状态为EOF的同一流时抛出错误,即光标位于文件末尾,并且没有根标记

而不是使用允许多次读取的TextReader用户XMLTextReader

using (FileStream fs = new FileStream(path, FileMode.Open))
 {
    using (XmlReader reader = new XmlTextReader(fs))
      {
         XmlSerializer serializer = new XmlSerializer(typeof(T));
         root = (T)serializer.Deserialize(reader);
      }

 }

任何有关此异常的上下文的有用信息都将受到重视。异常表示缺少
根元素
。。。您的Xml无效。如何将对象序列化为Xml?您有失败的xml示例吗?添加了有问题的xml