Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.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文件中并再次读取它们,但我遇到了一个错误_C#_Xml_Winforms_Filestream_Streamwriter - Fatal编程技术网

C# 我试图简单地将两种不同的数据类型附加到我的xml文件中并再次读取它们,但我遇到了一个错误

C# 我试图简单地将两种不同的数据类型附加到我的xml文件中并再次读取它们,但我遇到了一个错误,c#,xml,winforms,filestream,streamwriter,C#,Xml,Winforms,Filestream,Streamwriter,我正在使用Winforms,在按下保存按钮后按下加载按钮时,出现以下错误: <?xml version="1.0"?> <ArrayOfStudentClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <StudentClass>

我正在使用Winforms,在按下保存按钮后按下加载按钮时,出现以下错误:

<?xml version="1.0"?>
<ArrayOfStudentClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <StudentClass>
    <Name>wewewe</Name>
    <Class>2222</Class>
  </StudentClass>
</ArrayOfStudentClass><?xml version="1.0"?>
<DicItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <DicItem id="1" value="one" />
  <DicItem id="2" value="two" />
</DicItem>
InvalidOperationException:不应为

这是我的密码:

private void save_Click(object sender, EventArgs e)
{
    // if you don't specify it, then it saves in the bin folder of the program
    FileStream fs = new FileStream(@"C:\Users\Owner\Desktop\Student2.Xml", FileMode.Append, FileAccess.Write); //@"C:\Users\Owner\Desktop\Student.Xml"

    StudentClass sc = new StudentClass();

    sc.Name = textBox1.Text;
    sc.Class = int.Parse(textBox2.Text);

    ls.Add(sc);
       
    StudentSerializer.Serialize(fs, ls);
    DicSerializer.Serialize(fs,
                            dict.Select(kv => new DicItem() { id = kv.Key, value = kv.Value }).ToArray());

    fs.Close();
}

private void load_Click(object sender, EventArgs e)
{
    FileStream fs = new FileStream(@"C:\Users\Owner\Desktop\Student2.Xml", FileMode.Open, FileAccess.Read);

    ls = (List<StudentClass>)StudentSerializer.Deserialize(fs);

    var orgDict = ((DicItem[])DicSerializer.Deserialize(fs))
                     .ToDictionary(i => i.id, i => i.value);

    foreach (var item in orgDict) 
         Debug.WriteLine(item.Key + " and " + item.Value);

    fs.Close();
}
我的字典里已经有两项了。我的学生班也有两个文本框中的项目。还要注意的是,我的xml文件在发生错误后会被清除。谢谢你的帮助

另外,这就是我的xml在点击“保存”按钮后的样子:

<?xml version="1.0"?>
<ArrayOfStudentClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <StudentClass>
    <Name>wewewe</Name>
    <Class>2222</Class>
  </StudentClass>
</ArrayOfStudentClass><?xml version="1.0"?>
<DicItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <DicItem id="1" value="one" />
  <DicItem id="2" value="two" />
</DicItem>

投诉是因为就在第一个DictItem标签之前。这样的标记AFAIK应该只在XML文件中出现一次


您应该发布每个类的反序列化程序代码以进行更多调查。

如果删除第二个声明,则以下代码将起作用

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            XmlReaderSettings settings = new XmlReaderSettings();
            settings.ConformanceLevel = ConformanceLevel.Fragment;

            XmlReader reader = XmlReader.Create(FILENAME, settings);

            reader.ReadToFollowing("ArrayOfStudentClass");
            XElement ArrayOfStudentClass = (XElement)XElement.ReadFrom(reader);

            reader.ReadToFollowing("DicItem");
            XElement DicItem = (XElement)XElement.ReadFrom(reader);

        }
    }
}

如何只添加一次,或者如何删除它?这不仅是重复的XML声明,而且更重要的是,存在两个根元素。嗯,然后通过序列化包含第一个和第二个元素的数组来创建一个根元素。为每个类实现ISerializable接口。XML文件只能有一个根元素。因此,连接两个XML文件会产生一个无效的XML文件。