私はクレジットカードの詳細を表すクラスを持っています。私はXML第三者による消費のためにこのクラスをシリアル化していますXMLシリアル化による要素/属性値の書式設定
public int ValidFromMonth { get; set; }
public int ValidFromYear { get; set; }
public int ExpiresEndMonth { get; set; }
public int ExpiresEndYear { get; set; }
:から有効と有効期限の月と年を表現するために、私はタイプint
の4つのプロパティを使用しています。値が10未満
<validFromMonth>02</validFromMonth>
<validFromYear>09</validFromYear>
<expiresEndMonth>10</expiresEndMonth>
<expiresEndYear>14</expiresEndYear>
は、.NET任意の帰属をサポートしていますであれば第三者が先行ゼロを前置することが私の月と年の値を必要とする(または、私は、カスタム属性を作成することが可能である)ことおそらくフォーマット文字列(例:{0:00}
)を使用してこのルールを適用しますか?
注:私は、内部書式設定を行う自分のstring
プロパティを追加し、私のint
プロパティに[XmlIgnore]
属性を追加することができることを知っているが、これは二流のソリューションのように感じています。
編集: これは実際には実現可能ではないかと私は思っています。シリアライゼーションは問題ありませんが、デシリアライゼーションを機能させるには、シリアライズされた文字列のフォーマットを解除する必要があります。上の簡単な例ではこれは簡単ですが、より一般的な場合にはうまくいくかどうかはわかりません。
Edit2: 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クラスのアプローチを何年も使用する必要があります。おそらく、 –
。だからこそ私はそれをやめました。私は、彼らがあなたのニーズに応じて別々の回答としてそれらを保つことを保証するのに十分に異なっていたと思った。私は実際に彼らが4桁に年のフィールドを拡大することについて表示されます。つまり、彼らはすでに冗長フォーマット(XML)を使用していますが、今年は2桁しか使わないことで節約していると思いますか?しかし、あなたが彼らのスキーマを使用して立ち往生している場合、私は理解します。いずれにしても、これらの2つのことは、必要なものを達成するのに役立ちます。 –