在我們的應用程序中,我們有一個Money類型,它包含一個金額(十進制)和一個貨幣代碼(字符串)。在簡單的形式,它看起來像這樣:實現複合數據類型的自定義XML序列化/反序列化?
public class Money
{
public decimal Amount{get;set;}
public string CurrencyCode{get;set;}
}
正如你可能想象,這在應用中有許多地方被使用,因爲它是從客戶端發送到/經常是序列化/反序列化。貨幣金額通常被序列化爲複合值,例如, 「1.23美元」代表1.23美元。舊客戶端(HTML/JS)會將該值解析爲其組成部分,並返回Money類型。錢值作爲元素值發送,並作爲屬性值,取決於它們在應用程序,如其中:
<SomeClass moneyValue="1.23USD" ... />
或
<SomeClass>
<MoneyValue>1.23USD</MoneyValue>
...
</SomeClass>
我試圖找出一種方式,我可以使用內置的C#/ .NET Xml序列化工具來實現這種相同的行爲。我着眼於實現ISerializable,但一直未能弄清楚這樣做的正確方法。
本質上,我希望能夠通過我自己的自定義邏輯(知道如何將「1.23USD」解析爲貨幣數量)反序列化貨幣數量,並將其序列化爲簡單字符串。 「1.23USD」
的最終目標將是能夠在一個類中的貨幣量或者:
[XmlAttribute]
public Money SomeField // SomeField='123.USD
或:
[XmlElement]
public Money SomeOtherField //<SomeOtherField>1.23USD</SomeOtherField>
用同樣的方法,你可以這樣做簡單類型如int,string,double等。
這可能嗎?
如何創建一些格式化你想要的公共字符串屬性?然後像你一樣使用XML序列化器。將原始字段設置爲[XmlIgnore]。如果要保留現有類型,只需使用一個包裝類,將包裝類的成員公開爲公共屬性。 – Baldrick