Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# XML反序列化{quot;根元素丢失。}错误_C#_.net_Xml - Fatal编程技术网

C# XML反序列化{quot;根元素丢失。}错误

C# XML反序列化{quot;根元素丢失。}错误,c#,.net,xml,C#,.net,Xml,我正在向解决方案中添加一个新项目,并添加了下面发布的代码。LoadXML()方法、变量设置和文件反序列化的执行方式与我在整个解决方案中多次执行的方式完全相同,但现在对于这一部分,它突然抛出了这个恼人的“{”根元素丢失“}”错误——即使没有XML存在,或者我使用了我知道有效的其他XML。这对我来说意味着bug显然存在于代码中,但由于代码几乎是从我以前的文件传输中复制的,我也不知道这是怎么回事。之前在这个网站上发布的这个错误的其他情况与我的情况并不完全一致,所以我开始了一个新的情况,希望我能更接近一

我正在向解决方案中添加一个新项目,并添加了下面发布的代码。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
内容,使其读取