C# XML反序列化{quot;根元素丢失。}错误
我正在向解决方案中添加一个新项目,并添加了下面发布的代码。LoadXML()方法、变量设置和文件反序列化的执行方式与我在整个解决方案中多次执行的方式完全相同,但现在对于这一部分,它突然抛出了这个恼人的“{”根元素丢失“}”错误——即使没有XML存在,或者我使用了我知道有效的其他XML。这对我来说意味着bug显然存在于代码中,但由于代码几乎是从我以前的文件传输中复制的,我也不知道这是怎么回事。之前在这个网站上发布的这个错误的其他情况与我的情况并不完全一致,所以我开始了一个新的情况,希望我能更接近一个答案C# XML反序列化{quot;根元素丢失。}错误,c#,.net,xml,C#,.net,Xml,我正在向解决方案中添加一个新项目,并添加了下面发布的代码。LoadXML()方法、变量设置和文件反序列化的执行方式与我在整个解决方案中多次执行的方式完全相同,但现在对于这一部分,它突然抛出了这个恼人的“{”根元素丢失“}”错误——即使没有XML存在,或者我使用了我知道有效的其他XML。这对我来说意味着bug显然存在于代码中,但由于代码几乎是从我以前的文件传输中复制的,我也不知道这是怎么回事。之前在这个网站上发布的这个错误的其他情况与我的情况并不完全一致,所以我开始了一个新的情况,希望我能更接近一
//fileName and XML variables for serialization/deserialization
const string fileName = "SimulatedTrain1.xml";
XmlSerializer xml = new XmlSerializer(typeof(BindingList<SimulatedTrain>));
//Create BindingList object to hold XML data
public BindingList<SimulatedTrain> SimulatedTrain = new BindingList<SimulatedTrain>();
public void LoadXML()
{
try
{
using (var fs = new FileStream(fileName, FileMode.OpenOrCreate))
{
var tempTrain = (BindingList<SimulatedTrain>)xml.Deserialize(fs);
SimulatedTrain = tempTrain;
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message, ex);
}
}
//用于序列化/反序列化的文件名和XML变量
常量字符串fileName=“SimulatedTrain1.xml”;
XmlSerializer xml=新的XmlSerializer(typeof(BindingList));
//创建BindingList对象以保存XML数据
public BindingList SimulatedTrain=new BindingList();
公共void LoadXML()
{
尝试
{
使用(var fs=new FileStream(文件名,FileMode.OpenOrCreate))
{
var=(BindingList)xml.Deserialize(fs);
模拟雨=诱惑雨;
}
}
捕获(例外情况除外)
{
控制台写入线(例如消息,例如);
}
}
LoadXML()在表单\u load上被调用
编辑:这是我的XML文件的一部分(其余基本上是重复数据)
首先,通过选择将XML文件复制到生成目录中 假设该文件存在,反序列化XML文件时可能会出现类型转换错误 以下工作: SimulatedTrain.cs:
[XmlRoot("ArrayOfSimulatedRailCar")]
public class SimulatedTrain
{
[XmlElement("SimulatedRailCar")]
public List<SimulatedRailCar> Cars { get; set; }
}
TrainProg.cs:
const string fileName = "SimulatedTrain1.xml";
XmlSerializer xml = new XmlSerializer(typeof(SimulatedTrain));
public SimulatedTrain SimulatedTrain;
public void LoadXML()
{
Contract.Assert(File.Exists(fileName));
try
{
using (var fs = new FileStream(fileName, FileMode.Open))
{
SimulatedTrain = (SimulatedTrain)xml.Deserialize(fs);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message, ex);
}
}
首先,通过选择将XML文件复制到构建目录中 假设该文件存在,反序列化XML文件时可能会出现类型转换错误 以下工作: SimulatedTrain.cs:
[XmlRoot("ArrayOfSimulatedRailCar")]
public class SimulatedTrain
{
[XmlElement("SimulatedRailCar")]
public List<SimulatedRailCar> Cars { get; set; }
}
TrainProg.cs:
const string fileName = "SimulatedTrain1.xml";
XmlSerializer xml = new XmlSerializer(typeof(SimulatedTrain));
public SimulatedTrain SimulatedTrain;
public void LoadXML()
{
Contract.Assert(File.Exists(fileName));
try
{
using (var fs = new FileStream(fileName, FileMode.Open))
{
SimulatedTrain = (SimulatedTrain)xml.Deserialize(fs);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message, ex);
}
}
你能给我们看看你的
SimulatedTrain1.xml
?把它放在那里让你看看!可能尝试FileMode.Open
而不是Open或create
?还要确保它正在查找该文件,而不是创建一个。您的类注释可能有问题-序列化程序需要不同的根节点名称或命名空间。您可以向我们展示您的SimulatedTrain1.xml
?为您提供了它看看!可能尝试文件模式。打开
而不是打开或创建
?还要确保它正在查找该文件,而不是创建文件。您的类注释可能有问题-序列化程序需要不同的根节点名称或命名空间。这是一种有趣的尝试方法。在模仿这个设置之后,我确实注意到了一个变化;然而,我不能说这是否一定是为了更好:我现在收到一条消息,说在(2,2)而不是(0,0)处有一个错误,并说“'在我的代码中,您应该将XmlRoot设置为ArrayOfSimulatedRailCar。此外,删除xml文件中的xmlns
内容,使其读取
。这是一种有趣的尝试方法。在模仿这个设置之后,我确实注意到了一个变化;然而,我不能说这是否一定是为了更好:我现在收到一条消息,说在(2,2)而不是(0,0)处有一个错误,并说“'在我的代码中,您应该将XmlRoot设置为ArrayOfSimulatedRailCar。此外,删除xml文件中的xmlns
内容,使其读取
。