C# 反序列化时出错

C# 反序列化时出错,c#,xml,C#,Xml,我正在尝试编写一些代码来反序列化XML文件。我环顾了一下四周,发现了一些让我想到以下方法的东西: public static void Deserialize(string filePath) { RootObject ro = null; string path = filePath; XmlSerializer serializer = new XmlSerializer(typeof(RootObject));

我正在尝试编写一些代码来反序列化XML文件。我环顾了一下四周,发现了一些让我想到以下方法的东西:

    public static void Deserialize(string filePath)
    {
        RootObject ro = null;
        string path = filePath;

        XmlSerializer serializer = new XmlSerializer(typeof(RootObject));

        StreamReader reader = new StreamReader(path);
        ro = (RootObject) serializer.Deserialize(reader);
        reader.Close();
    }
但我得到的只是这个错误,我不确定是什么原因造成的:

    public static void Deserialize(string filePath)
    {
        RootObject ro = null;
        string path = filePath;

        XmlSerializer serializer = new XmlSerializer(typeof(RootObject));

        StreamReader reader = new StreamReader(path);
        ro = (RootObject) serializer.Deserialize(reader);
        reader.Close();
    }
XML文档(2,2)中存在错误

    public static void Deserialize(string filePath)
    {
        RootObject ro = null;
        string path = filePath;

        XmlSerializer serializer = new XmlSerializer(typeof(RootObject));

        StreamReader reader = new StreamReader(path);
        ro = (RootObject) serializer.Deserialize(reader);
        reader.Close();
    }
您在Deserialize()中看到的RootObject是这样的:我不熟悉XMl序列化/反序列化,所以我不确定是否100%正确地定义了它

    public static void Deserialize(string filePath)
    {
        RootObject ro = null;
        string path = filePath;

        XmlSerializer serializer = new XmlSerializer(typeof(RootObject));

        StreamReader reader = new StreamReader(path);
        ro = (RootObject) serializer.Deserialize(reader);
        reader.Close();
    }
    public class RootObject
    {
        public Services Services { get; set; }
    }

    public class Services
    {
        public Service TileMapService { get; set; }
    }

    public class Service
    {
        public string Title { get; set; }
        public string href { get; set; }
    }
我首先使用此方法创建XML文件,它似乎工作正常:

    public static void Deserialize(string filePath)
    {
        RootObject ro = null;
        string path = filePath;

        XmlSerializer serializer = new XmlSerializer(typeof(RootObject));

        StreamReader reader = new StreamReader(path);
        ro = (RootObject) serializer.Deserialize(reader);
        reader.Close();
    }
    public static void WriteToXmlFile<T>(string filePath, T objectToWrite) where T : new()
    {
        TextWriter writer = null;
        try
        {
            var serializer = new XmlSerializer(typeof (T));
            writer = new StreamWriter(filePath);
            serializer.Serialize(writer, objectToWrite);
        }
        finally
        {
            if (writer != null)
            {
                writer.Close();
            }
        }
    }
public static void WriteToXmlFile(字符串文件路径,T objectToWrite),其中T:new()
{
TextWriter=null;
尝试
{
var serializer=newxmlserializer(typeof(T));
writer=新的StreamWriter(文件路径);
serializer.Serialize(writer,objectToWrite);
}
最后
{
if(writer!=null)
{
writer.Close();
}
}
}
它给我一个XML文件,如下所示:

    public static void Deserialize(string filePath)
    {
        RootObject ro = null;
        string path = filePath;

        XmlSerializer serializer = new XmlSerializer(typeof(RootObject));

        StreamReader reader = new StreamReader(path);
        ro = (RootObject) serializer.Deserialize(reader);
        reader.Close();
    }
<RootObject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Services>
    <TileMapService>
      <Title>Some title</Title>
      <href>http://something</href>
    </TileMapService>
  </Services>
</RootObject>

一些头衔
http://something
您的代码工作正常。“XML文档(2,2)中存在错误”可能是因为实际文件(不是由
WriteToXmlFile
创建的文件)的开头有空格,或者使用了错误的命名空间。查看
.InnerException
了解更多详细信息,或者(可能更简单)请发布实际的xml文件内容。它工作良好的示例(以及对两个关键方法的一些建议调整):

    public static void Deserialize(string filePath)
    {
        RootObject ro = null;
        string path = filePath;

        XmlSerializer serializer = new XmlSerializer(typeof(RootObject));

        StreamReader reader = new StreamReader(path);
        ro = (RootObject) serializer.Deserialize(reader);
        reader.Close();
    }
static void Main()
{
RootObject obj=新的RootObject
{
服务=新服务
{
TileMapService=新服务
{
Title=“abc”,
href=“def”
}
}
};
WriteToXmlFile(“foo.xml”,obj);
var-load=反序列化(“foo.xml”);
var svc=loaded.Services.TileMapService;
System.Console.WriteLine(svc.Title);//abc
System.Console.WriteLine(svc.href);//def
}
公共静态无效WriteToXmlFile(字符串文件路径,T objectToWrite)
{       
var serializer=newxmlserializer(typeof(T));
使用(var writer=newstreamwriter(filePath))
{
serializer.Serialize(writer,objectToWrite);
}
}
公共静态T反序列化(字符串文件路径)
{
var serializer=newxmlserializer(typeof(T));
使用(var reader=newstreamreader(filePath))
{
返回(T)序列化程序。反序列化(读取器);
}
}

如何使用“WriteToXmlFile”和“反序列化”方法?我试过你的代码,效果很好。通常会有一个内部异常,它会告诉你更多关于出错原因的细节;那
试试
/
最后
应该是
使用
是的,我还发现它工作得很好。我只是把这个方法称为错误的地方,不知何故导致了这个错误。你的调整也很有意义。谢谢你。