如何解决序列化后只保存最新的客户
我需要构建一个控制台应用程序,允许用户输入(通过终端)新用户的详细信息。然后需要通过序列化将其写入 XML(必需)。我构建了我的客户类并有一个方法来构建新用户 - 但它总是会忘记最后一个条目并且只将一个用户实例写入我的列表。
这是我为添加用户而构建的方法:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Serialization;
namespace Hausarbeit_Autovermietung_Gierow
{
class Addcustomer
{
public void AddCustomer()
{
var customer = new Customer();
List<Customer> customers = new List<Customer>() { customer };
//DeserializeFromXML(customer);
DeserializeFromXML(customers);
var listCount = customers.Count;
int maxID = FindMaxValue(customers,x => x.ID);
Console.WriteLine("Vorname eingeben");
customer.Firstname = Console.ReadLine();
Console.WriteLine("Nachname eingeben");
customer.Lastname = Console.ReadLine();
// int ID;
customer.ID = maxID + 1;
//List<Customer> customers = new List<Customer>() { customer };
SerializeToXML(customer);
SerializeToXML(customers);
foreach (var cust in customers)
{
Console.WriteLine($"Vorname: {cust.ID} {cust.Firstname} {cust.Lastname}");
Console.ReadKey();
}
}
static public void SerializeToXML(Customer customer)
{
XmlSerializer serializer = new XmlSerializer(typeof(Customer));
using (TextWriter textWriter = new StreamWriter(@"customer.xml"))
{
serializer.Serialize(textWriter,customer);
}
}
public static void SerializeToXML(List<Customer> customers)
{
//var customer = new Customer("Vorname","Nachname");
XmlSerializer serializer = new XmlSerializer(typeof(List<Customer>));
using (System.IO.TextWriter textWriter = new System.IO.StreamWriter(@"List.xml"))
{
serializer.Serialize(textWriter,customers);
}
}
static List<Customer> DeserializeFromXML(List<Customer> customers)
{
XmlSerializer deserializer = new XmlSerializer(typeof(List<Customer>));
List<Customer> customerslist;
using (TextReader textReader = new StreamReader(@"List.xml"))
{
customerslist = (List<Customer>)deserializer.Deserialize(textReader);
return customerslist;
}
}
public int FindMaxValue<T>(List<T> list,Converter<T,int> projection)
{
if (list.Count == 0)
{
throw new InvalidOperationException("Empty list");
}
int maxValue = int.MinValue;
foreach (T item in list)
{
int value = projection(item);
if (value > maxValue)
{
maxValue = value;
}
}
return maxValue;
}
}
}
解决方法
在这里创建一个仅包含新客户的列表:
List<Customer> customers = new List<Customer>() { customer };
然后通过反序列化 xml 使用新实例覆盖它:
DeserializeFromXML(customers);
但您永远不会添加新客户(添加此行):
customers.Add(customer);
因此,当您进行序列化时,新客户将成为列表的一部分:
SerializeToXML(customers);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。