Se si utilizza XmlSerializer
, XmlAttributeOverrides
è probabilmente quello che ti serve.
Aggiornamento: Ho studiato le possibilità di personalizzare il formato della data e, per quanto posso vedere, non esistono soluzioni carine.
Un'opzione, come è stato menzionato da altri, è l'implementazione di IXmlSerializable
. Questo ha l'inconveniente di essere completamente responsabile della (de-) serializzazione dell'intero oggetto (-grafico).
Una seconda opzione, con una lista abbastanza ampia di inconvenienti, è quella di sottoclasse della classe base (l'hai citata come alternativa nel tuo post). Con un po 'di impianto idraulico, le conversioni da e per l'oggetto originale, e l'uso di XmlAttributeOverrides
si potrebbe costruire qualcosa di simile:
public class Test
{
public int Prop { get; set; }
public DateTime TheDate { get; set; }
}
public class SubTest : Test
{
private string _customizedDate;
public string CustomizedDate
{
get { return TheDate.ToString("yyyyMMdd"); }
set
{
_customizedDate = value;
TheDate = DateTime.ParseExact(_customizedDate, "yyyyMMdd", null);
}
}
public Test Convert()
{
return new Test() { Prop = this.Prop };
}
}
// Serialize
XmlAttributeOverrides overrides = new XmlAttributeOverrides();
XmlAttributes attributes = new XmlAttributes();
attributes.XmlIgnore = true;
overrides.Add(typeof(Test), "TheDate", attributes);
XmlSerializer xs = new XmlSerializer(typeof(SubTest), overrides);
SubTest t = new SubTest() { Prop = 10, TheDate = DateTime.Now, CustomizedDate="20120221" };
xs.Serialize(fs, t);
// Deserialize
XmlSerializer xs = new XmlSerializer(typeof(SubTest));
SubTest t = (SubTest)xs.Deserialize(fs);
Test test = t.Convert();
Non è abbastanza, ma funzionerà.
Si noti che in questo caso si sta effettivamente (de-) serializzando oggetti SubTest. Se il tipo esatto è importante, anche questa non sarà un'opzione.
fonte
2012-02-21 12:21:26
A proposito, stiamo usando .NET 4.0 – Schiavini
E il XmlSerializer – Schiavini