Come sempre il post sarà lunghetto, armatevi di pazienza e buona lettura.
partiamo da una cosa semplice un Entity più o meno banale.
public class Entity
{
#region Private
private int _UserID;
private string _UserName;
private string _UserSurname;
private DateTime _UserBirth;
private string _UserAddress;
#endregion
#region Public
public int UserID
{
get { return _UserID; }
set { _UserID = value; }
}
public string UserName
{
get { return _UserName; }
set { _UserName = value; }
}
public string UserSurname
{
get { return _UserSurname; }
set { _UserSurname = value; }
}
public DateTime UserBirth
{
get { return _UserBirth; }
set { _UserBirth = value; }
}
public string UserAddress
{
get { return _UserAddress; }
set { _UserAddress = value; }
}
#endregion
}
Nulla di davvero eccezionale...
Quindi passiamo alle possibili collezioni ...
public class Entities:List
{
}
public class collectionEntities : System.Collections.CollectionBase
{
public void Add(Entity et)
{
this.List.Add(et);
}
}
public class GenericEntities
{
public class Item
{
private Item next;
private T data;
public Item Next
{
get { return next; }
set { next = value; }
}
public T Data
{
get { return data; }
set { data = value; }
}
public Item(T t)
{
next = null;
Data = t;
}
}
private Item Element;
public GenericEntities()
{
Element = null;
}
public void Add(T t)
{
Item i = new Item(t);
i.Next = Element;
Element = i;
}
public IEnumerator
{
Item current = Element;
while (current != null)
{
yield return current.Data;
current = current.Next;
}
}
}
e quindi i serializer ...
public static class SerializerTool
{
public static string Serialize(Entities eList)
{
XmlSerializer xmls = new XmlSerializer(typeof(Entities));
StringWriter sw = new StringWriter();
xmls.Serialize(sw, eList);
return sw.ToString();
}
public static string Serialize(Entity[] eList)
{
XmlSerializer xmls = new XmlSerializer(typeof(Entity[]));
StringWriter sw = new StringWriter();
xmls.Serialize(sw, eList);
return sw.ToString();
}
public static string Serialize(collectionEntities eList)
{
XmlSerializer xmls = new XmlSerializer(typeof(collectionEntities));
StringWriter sw = new StringWriter();
xmls.Serialize(sw, eList);
return sw.ToString();
}
public static string Serialize(GenericEntities
{
XmlSerializer xmls = new XmlSerializer(typeof(GenericEntities
StringWriter sw = new StringWriter();
xmls.Serialize(sw, eList);
return sw.ToString();
}
}
bene questo è tutto quello che ci serve o quasi per il nostro esempio..
manca solo il main
class Program
{
static void Main(string[] args)
{
#region Entity Creation
Entity e1 = new Entity();
e1.UserName = "Mario";
e1.UserSurname = "Rossi";
e1.UserBirth = DateTime.Parse("01/01/1994");
e1.UserAddress = "via roma n1 ";
Entity e2 = new Entity();
e2.UserName = "Davide";
e2.UserSurname = "Bianchi";
e2.UserBirth = DateTime.Parse("05/05/1996");
e2.UserAddress = "via milano n2 ";
Entity e3 = new Entity();
e3.UserName = "Giorgio";
e3.UserSurname = "Verdi";
e3.UserBirth = DateTime.Parse("05/05/1996");
e3.UserAddress = "via torino n3";
#endregion
// LIST T
Entities el = new Entities();
el.Add(e1);
el.Add(e2);
el.Add(e3);
Console.WriteLine("List T");
Console.WriteLine(SerializerTool.Serialize(el));
Console.ReadLine();
// Array
Entity[] eA = new Entity[3];
eA[0] = e1;
eA[1] = e2;
eA[2] = e3;
Console.WriteLine("ARRAY");
Console.WriteLine(SerializerTool.Serialize(eA));
Console.ReadLine();
// collectionBase
collectionEntities eC = new collectionEntities();
eC.Add(e1);
eC.Add(e2);
eC.Add(e3);
Console.WriteLine("Collection");
Console.WriteLine(SerializerTool.Serialize(eA));
Console.ReadLine();
GenericEntities
gE.Add(e1);
gE.Add(e2);
gE.Add(e3);
Console.WriteLine("Generics");
Console.WriteLine(SerializerTool.Serialize(eA));
Console.ReadLine();
}
}
Io che sono più o meno testardo provando questo codice non i sono accorto di grandi differenze,
tanto che l'xml risultante è uguale per tutti ...
Che cosa cambia quindi ? I tempi ? I pesi ? L'occupazione di memoria ?
Per List
tutto o quasi ma posso riutilizzare il codice completamente per altri scopi...
Quindi a parità di risultati possiamo ancora una volta scegliere differenti modalità di implementazione.
Nessun commento:
Posta un commento