Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.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_Serialization - Fatal编程技术网

C#控制台如何从以前的数据反序列化XML来启动程序

C#控制台如何从以前的数据反序列化XML来启动程序,c#,xml,serialization,C#,Xml,Serialization,我的控制台程序由一个通用列表组成,当控制台启动时,其中已有4个值。用户只能在列表中再输入一个名称。我希望我的程序能够在关闭前序列化数据。我能够从xml文件反序列化,在程序启动时打印出所有五个名称。序列化部分工作正常。如果我把反序列化代码放在序列化部分的正下方,我也可以反序列化。但是,这与能够从以前的使用中加载数据的目的背道而驰。下面是我的代码。感谢您的帮助 using System; using System.Collections.Generic; using System.Linq;

我的控制台程序由一个通用列表组成,当控制台启动时,其中已有4个值。用户只能在列表中再输入一个名称。我希望我的程序能够在关闭前序列化数据。我能够从xml文件反序列化,在程序启动时打印出所有五个名称。序列化部分工作正常。如果我把反序列化代码放在序列化部分的正下方,我也可以反序列化。但是,这与能够从以前的使用中加载数据的目的背道而驰。下面是我的代码。感谢您的帮助

    using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Xml;
using System.Xml.Serialization;

namespace serializationtest
{
    class Program
    {
        static void Main(string[] args)
        {
            List<string> ListOfName = new List<string>();
            ListOfName.Add("Bob");
            ListOfName.Add("Mary");
            ListOfName.Add("Peter");
            ListOfName.Add("May");
            ListOfName.Add(null);


            Console.WriteLine("Fill in the last name");
            ListOfName[4] = Console.ReadLine();
            XmlSerializer ListOfNameSerializer = new XmlSerializer(typeof(List<string>));
            TextWriter FileSaveListOfName = new StreamWriter(@"ListofName.xml");
            ListOfNameSerializer.Serialize(FileSaveListOfName, ListOfName);
            FileSaveListOfName.Close();
            XmlSerializer ListOfNameDeserializer = new XmlSerializer(typeof(List<string>));
            FileStream ReadTheList = new FileStream(@"ListofName.xml", FileMode.Open, FileAccess.Read, FileShare.Read);
            ListOfName = (List<string>)ListOfNameSerializer.Deserialize(ReadTheList);
            Console.ReadLine();
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
使用System.IO;
使用System.Xml;
使用System.Xml.Serialization;
命名空间序列化测试
{
班级计划
{
静态void Main(字符串[]参数)
{
List ListOfName=新列表();
添加(“Bob”);
名称列表。添加(“玛丽”);
名称列表。添加(“彼得”);
名称列表。添加(“可能”);
ListOfName.Add(空);
Console.WriteLine(“填写姓氏”);
ListOfName[4]=Console.ReadLine();
XmlSerializer ListOfNameSerializer=新的XmlSerializer(typeof(List));
TextWriter FileSaveListOfName=新的StreamWriter(@“ListofName.xml”);
序列化(FileSaveListOfName,ListOfName);
FileSaveListOfName.Close();
XmlSerializer ListOfNameDeserializer=新的XmlSerializer(typeof(List));
FileStream ReadTheList=newfilestream(@“ListofName.xml”,FileMode.Open,FileAccess.Read,FileShare.Read);
ListOfName=(List)ListOfNameSerializer.Deserialize(ReadTheList);
Console.ReadLine();
}
}
}

检查序列化到的文件是否存在;如果有,反序列化,否则像你一样从头开始创建一切。然后继续程序流。文件在我序列化之后就在那里,我可以在程序结束时反序列化它。但是,我希望能够在第二次运行程序时在程序开始时反序列化现有文件。有办法吗?如果你还没有运行程序,没有文件,那么我的方法应该很好。我只是没有时间向你详细概述。很抱歉我明天早上会去的。经过反复的讨论,我想问题是我找到文件本身的路径。如果使用默认路径(@“NameOfFile”),则可以将文件反序列化到另一个xmlserializer对象,而不会出现任何问题。当我将文件放入我的C:\users\中时,当我在程序开始时尝试反序列化文件时,程序给了我XML文档(0,0)错误。我有没有办法避免这个问题?我应该能够把我的文件放在任何正确的路径上?用记事本打开这两个文件并比较文件。我怀疑您没有正确地写入文件的结尾。尝试在现有Close()方法之前添加Flush()方法。