Che cosa ci viene offerto gratuitamente dal sistema
Come ho già spiegato nel precedente post, .NET è molto XML friendly, pertanto ci offre una serie di funzionalità di base al riguardo senza che dobbiamo divertirci a fare le cose a manina. Pertanto ho costruito una classe fondamentalmente inutile che però ci dimostra come tutti i tipi di dati di base di .NET sono serializzabili.
using System; using System.Text;
namespace DnwEnitities.Entities { public class Serializzabile { public Serializzabile() { TheChar = 'A'; TheByte = 10; TheBool = true; TheShort = 100; TheInt = 1000; TheLong = 1000000; TheFloat = 1234.7899f; TheDouble = 9800000.89600; TheDecimal = 766000000.654390001m; TheString = "The string is very nice and useful."; TheDate = DateTime.Now; TheGuid = Guid.NewGuid(); TheEnum = SerializableEnum.ALot; } public char TheChar { get; set; } public byte TheByte { get; set; } public bool TheBool { get; set; } public short TheShort { get; set; } public int TheInt { get; set; } public long TheLong { get; set; } public float TheFloat { get; set; } public double TheDouble { get; set; } public decimal TheDecimal { get; set; } public string TheString { get; set; } public DateTime TheDate { get; set; } public Guid TheGuid { get; set; } public SerializableEnum TheEnum { get; set; } public static Serializzabile ReadXml(string pSerializedData, bool pIsXmlData) { Serializzabile retP = null; if (!pIsXmlData) { retP = (Serializzabile)SerializeHelper.DeserializeFromFile(
typeof(Serializzabile), pSerializedData); } else { retP = (Serializzabile)SerializeHelper.DeserializeFromString(
typeof(Serializzabile), pSerializedData); } return (retP); } public virtual void WriteXml(string pFileName) { SerializeHelper.SerializeToFile(pFileName, this, typeof(Serializzabile), false, string.Empty); } public virtual string WriteXml() { return (SerializeHelper.SerializeToString(this, false, string.Empty)); } public override string ToString() { StringBuilder sb = new StringBuilder(); sb.AppendFormat("Char: {0}", this.TheChar); sb.AppendLine(); sb.AppendFormat("Byte: {0}", this.TheByte); sb.AppendLine(); sb.AppendFormat("Bool: {0}", this.TheBool); sb.AppendLine(); sb.AppendFormat("Short: {0}", this.TheShort); sb.AppendLine(); sb.AppendFormat("Int: {0}", this.TheInt); sb.AppendLine(); sb.AppendFormat("Long: {0}", this.TheLong); sb.AppendLine(); sb.AppendFormat("Float: {0}", this.TheFloat); sb.AppendLine(); sb.AppendFormat("Double: {0}", this.TheDouble); sb.AppendLine(); sb.AppendFormat("Decimal: {0}", this.TheDecimal); sb.AppendLine(); sb.AppendFormat("String: {0}", this.TheString); sb.AppendLine(); sb.AppendFormat("Date: {0}", this.TheDate); sb.AppendLine(); sb.AppendFormat("Guid: {0}", this.TheGuid); sb.AppendLine(); sb.AppendFormat("Enum: {0}", this.TheEnum); sb.AppendLine(); return (sb.ToString()); } } public enum SerializableEnum : int { None = 0, All, Some, ALot } }
Questa classe, rappresenta l’entity più grezza e semplice, contiene una serie di property pubbliche, una per ogni tipo di dato base usato in .NET, contiene i Metodi WriteXml e ReadXml, un override del metodo ToString per permetterci di visualizzarne il contenuto ed infine una enumerazione che ci permette di mostrare che anche i dati enumerati, sono serializzati automaticamente.
Instanziando la classe e lanciando WriteXml su un file, otterremo il seguente risultato:
<?xml version="1.0" encoding="utf-8"?> <Serializzabile xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <TheChar>65</TheChar> <TheByte>10</TheByte> <TheBool>true</TheBool> <TheShort>100</TheShort> <TheInt>1000</TheInt> <TheLong>1000000</TheLong> <TheFloat>1234.78992</TheFloat> <TheDouble>9800000.896</TheDouble> <TheDecimal>766000000.654390001</TheDecimal> <TheString>The string is very nice and useful.</TheString> <TheDate>2010-11-01T09:26:13.331+01:00</TheDate> <TheGuid>3da90b04-ec02-4308-a177-fc6723ab8aa9</TheGuid> <TheEnum>ALot</TheEnum> </Serializzabile>
Usando la ReadXml per rileggere il file, otterremo una classe equivalente a quella da noi salvata.
Se non abbiamo particolari esigenze, questo è il metodo più semplice di ottenere un entità serializzabile.