C# 在c中查找xml元素#

C# 在c中查找xml元素#,c#,xml,serialization,C#,Xml,Serialization,我试图在我的公民列表中找到一个特定的元素,但结果总是空的。提前谢谢! 以下是我正在尝试的代码: string filepath = "citizens.xml"; if (!File.Exists(filepath)) { CitizensList list = new CitizensList(); Serializer.SerializeObject(filepath, list); } CitizensList citizens = Serializer.DeSerial

我试图在我的公民列表中找到一个特定的元素,但结果总是空的。提前谢谢! 以下是我正在尝试的代码:

string filepath = "citizens.xml";
if (!File.Exists(filepath))
{
    CitizensList list = new CitizensList();
    Serializer.SerializeObject(filepath, list);
}

CitizensList citizens = Serializer.DeSerializeObject(filepath);
Console.WriteLine("The File {0} has this data", filepath);
citizens.print();


Console.WriteLine("Chose the name of the citizen from the console");        
string name = Console.ReadLine();

CitizensList search = new CitizensList();
var matching = search.Citizen.Find(p => p.FirstName==(name));
if (matching == null)
{
    Console.WriteLine("The Citizen doesn't exists.");
}
else
{
    Serializer.SerializeObject(filepath, citizens);
    citizens = Serializer.DeSerializeObject(filepath);
    search.print();
}
以下是我在xml文件中插入正确工作的数据的代码:

Console.WriteLine("Insert the data of the citizen");
                        Console.WriteLine("Name:");
                        string nm = Console.ReadLine();
                        Console.WriteLine("Surname:");
                        string sn = Console.ReadLine();
                        Console.WriteLine("Email:");
                        string email = Console.ReadLine();
                        Console.WriteLine("Phone:");
                        string no = Console.ReadLine();
                        Citizens citizen = new Citizens();
                        if (citizens.Citizen.Count == 0)
                            citizen.Id = 1;
                        else
                            citizen.Id = Convert.ToInt32(citizens.Citizen.Last<Citizens>().Id) + 1;
                        citizen.FirstName = nm;
                        citizen.Lastname = sn;
                        citizen.Email = email;
                        citizen.PhoneNr = no;
                        citizens.Citizen.Add(citizen);

                        Serializer.SerializeObject(filepath, citizens);
                        citizens = Serializer.DeSerializeObject(filepath);
                        citizens.print();
Console.WriteLine(“插入公民的数据”);
Console.WriteLine(“名称:”);
字符串nm=Console.ReadLine();
控制台。WriteLine(“姓氏:”);
字符串sn=Console.ReadLine();
控制台。WriteLine(“电子邮件:”);
字符串email=Console.ReadLine();
控制台。WriteLine(“电话:”);
string no=Console.ReadLine();
公民=新公民();
如果(citizens.Citizen.Count==0)
公民Id=1;
其他的
citizen.Id=Convert.ToInt32(citizens.citizen.Last().Id)+1;
citizen.FirstName=nm;
citizen.Lastname=sn;
citizen.Email=电子邮件;
citizen.PhoneNr=否;
citizens.Citizen.Add(Citizen);
Serializer.SerializeObject(文件路径,公民);
公民=序列化程序.反序列化对象(文件路径);
公民。打印();

您正在
搜索中搜索,这是一个新创建的(只能假设)空列表

var matching = search.Citizen.Find(p => p.FirstName==(name));
您应该在
公民
中搜索,您的列表从文件中读取:

var matching = citizens.Citizen.Find(p => p.FirstName == name);

您正在
search
中搜索,这是一个新创建的(只能假设)空列表

var matching = search.Citizen.Find(p => p.FirstName==(name));
您应该在
公民
中搜索,您的列表从文件中读取:

var matching = citizens.Citizen.Find(p => p.FirstName == name);

您刚刚初始化的数据在哪里?序列化和反序列化列表中没有数据。如果“citizens.xml”实际存在任何数据,您是否调试了您的程序?是的,事实上我以前添加了一个insert方法来在xml文件中插入数据您确定要搜索的是姓氏吗,因为这是您的搜索条件
Citizen.Find(p=>p.FirstName==(name))。还要确保大小写正确。案例:01)检查使用相应数据生成的XML文件,02)反序列化时进行调试,03)检查linq中的大小写。您刚刚初始化的数据在哪里?序列化和反序列化列表中没有数据。如果为“citizes.XML”,您是否调试了程序物理上存在任何数据?是的,事实上我以前添加了一个insert方法来在xml文件中插入数据您确定要搜索的是姓氏,因为这是您的搜索条件
Citizen.Find(p=>p.FirstName==(name))。此外,还要确保大小写正确。案例:01)检查使用相应数据生成的XML文件,02)反序列化时进行调试,03)检查linq中的大小写。