我有一個表示信用卡詳細信息的類。爲了表示從和過期幾個月甚至幾年有效,我使用int
類型的四個屬性:使用XML序列化格式化元素/屬性值
public int ValidFromMonth { get; set; }
public int ValidFromYear { get; set; }
public int ExpiresEndMonth { get; set; }
public int ExpiresEndYear { get; set; }
我XML由第三方序列化這個類消費。第三方需要我的月份和年份值與前導零作爲前綴,如果該值小於10
<validFromMonth>02</validFromMonth>
<validFromYear>09</validFromYear>
<expiresEndMonth>10</expiresEndMonth>
<expiresEndYear>14</expiresEndYear>
是否.NET支持的任何屬性(或者是我能夠創建一個自定義屬性)將執行此規則,可能使用格式字符串(例如{0:00}
)?
注:我知道我可以添加自己的string
性能在內部做了格式化,並添加[XmlIgnore]
屬性我int
屬性,但這種感覺就像一個二流的解決方案。
編輯: 經過一些考慮,我想知道這實際上是不可行的。序列化不成問題,但爲了反序列化工作,您需要取消格式化序列化的字符串。在上面這個簡單的例子中,這很容易,但我不確定是否可以在更一般的情況下工作。
編輯2: 定義兩位數要求的XML架構如下。
簡單類型定義:
使用這些類型的<xs:simpleType name="CreditCardMonthType">
<xs:annotation>
<xs:documentation>Two digit month</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:minLength value="2" />
<xs:maxLength value="2" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="CreditCardYearType">
<xs:annotation>
<xs:documentation>Two digit year</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:minLength value="2" />
<xs:maxLength value="2" />
</xs:restriction>
</xs:simpleType>
信用卡的定義:
<xs:attribute name="ExpiryMonth" type="CreditCardMonthType" use="required">
<xs:annotation>
<xs:documentation>Credit/debt card's expiry month.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="ExpiryYear" type="CreditCardYearType" use="required">
<xs:annotation>
<xs:documentation>Credit/debt card's expiry year.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="StartMonth" type="CreditCardMonthType" use="optional">
<xs:annotation>
<xs:documentation>Switch card's start month.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="StartYear" type="CreditCardYearType" use="optional">
<xs:annotation>
<xs:documentation>Switch card's start year.</xs:documentation>
</xs:annotation>
</xs:attribute>
這是極好的 - 但我想我還是會需要多年來一直使用LeadingZero類的方法。 – 2009-04-27 10:24:32
也許吧。這就是我放棄它的原因。我認爲他們是不同的足以保證他們作爲單獨的答案(取決於你的需要)。我真的會看到讓他們將年份字段擴大到4位數字。我的意思是,來吧,他們已經使用了冗長的格式(XML),他們認爲他們通過僅使用兩位數字來節省多少時間?但我明白,如果你堅持使用他們的架構。無論哪種方式,這兩件事應該有助於完成你所需要的。 – 2009-04-27 12:52:37