Я создал три класса: класс «контакт», который содержит имя и номер телефона телефонного контакта;класс «list», который содержит описание и список «contact»;класс «архив», который содержит список «список».Как только архив создан, я сериализую его.
После десериализации больше нет соответствия между контактами, принадлежащими к разным спискам, которые изначально были одним контактом.
Если вы изменитесвойства контакта в одном из двух списков, это изменение не распространяется на контакт во втором списке.
Можно ли сохранить идентичность объектов после десериализации?
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Test();
}
private static void Test()
{
Contact c1 = new Contact();
c1.name = "Albert";
c1.phone_number = "111-111111";
Contact c2 = new Contact();
c2.name = "Enrico";
c2.phone_number = "111-222222";
Contact c3 = new Contact();
c3.name = "Niels";
c3.phone_number = "111-333333";
Contact c4 = new Contact();
c4.name = "Richard";
c4.phone_number = "111-444444";
Contact c5 = new Contact();
c5.name = "Marie";
c5.phone_number = "111-555555";
List list1 = new List();
list1.description = "USA list";
list1.contacts.Add(c4);
list1.contacts.Add(c1);
List list2 = new List();
list2.description = "EU list";
list2.contacts.Add(c1);
list2.contacts.Add(c2);
list2.contacts.Add(c3);
list2.contacts.Add(c5);
Archive arc = new Archive();
arc.lists.Add(list1);
arc.lists.Add(list2);
Archive.Serialize(Directory.GetCurrentDirectory() + "\\archive.xml", arc);
}
private void button1_Click(object sender, EventArgs e)
{
Archive arc_readed;
Archive.Deserialize(Directory.GetCurrentDirectory() + "\\archive.xml", out arc_readed);
arc_readed.lists[0].contacts[1].name = "Albert Einstein";
}
}
public class Contact
{
public string name;
public string phone_number;
}
public class List
{
public string description;
public List<Contact> contacts = new List<Contact>();
}
public class Archive
{
public List<List> lists = new List<List>();
public static bool Serialize(string filename, Archive isp)
{
XmlSerializer serializer = new XmlSerializer(isp.GetType());
Stream fs = new FileStream(filename, FileMode.Create);
XmlWriter writer = new XmlTextWriter(fs, Encoding.Unicode);
serializer.Serialize(writer, isp);
writer.Close();
fs.Close();
return true;
}
public static bool Deserialize(string filename, out Archive df)
{
if (File.Exists(filename))
{
XmlSerializer serializer = new XmlSerializer(typeof(Archive));
Archive i;
using (Stream reader = new FileStream(filename, FileMode.Open))
{
i = (Archive)serializer.Deserialize(reader);
}
df = i;
return true;
}
else
{
df = null;
return false;
}
}
}