XmlSerializer
を使用している場合は、おそらくXmlAttributeOverrides
が必要です。
更新日: 私は日付形式をカスタマイズする可能性を調査していますが、私が見る限り、解決策はありません。
他の人に言われているように、1つのオプションはIXmlSerializable
を実装することです。これは、オブジェクト全体(-graph)を完全に(非)直列化する責任があるという欠点があります。
2つ目のオプションは、非常に大きな欠点を持つリストで、基本クラスをサブクラス化することです(これはあなたの投稿の代わりに使用しました)。それはきれいではありませんが、それは動作します
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();
:かなりいくつかの配管、元のオブジェクトからとへの変換、およびXmlAttributeOverrides
を使用すると、あなたはこのような何かを構築することができます。
この場合、SubTestオブジェクトを実際に(非)直列化していることに注意してください。正確なタイプが重要な場合は、これもオプションではありません。
ところで、私たちは.NET 4.0 – Schiavini
を使用していますそしてXmlSerializer – Schiavini