C# 反序列化时出错
我正在尝试编写一些代码来反序列化XML文件。我环顾了一下四周,发现了一些让我想到以下方法的东西:C# 反序列化时出错,c#,xml,C#,Xml,我正在尝试编写一些代码来反序列化XML文件。我环顾了一下四周,发现了一些让我想到以下方法的东西: public static void Deserialize(string filePath) { RootObject ro = null; string path = filePath; XmlSerializer serializer = new XmlSerializer(typeof(RootObject));
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”和“反序列化”方法?我试过你的代码,效果很好。通常会有一个内部异常,它会告诉你更多关于出错原因的细节;那试试
/最后
应该是使用
是的,我还发现它工作得很好。我只是把这个方法称为错误的地方,不知何故导致了这个错误。你的调整也很有意义。谢谢你。