1. ホーム
  2. c#

[解決済み] XmlSerializerでDateTimeを'YYYY-MM-DD hh:mm:ss'としてシリアライズするよう強制する。

2023-05-04 03:19:49

質問

ある RESTful サービス用の XSD スキーマを持っています。このスキーマを xsd.exe ツールを使って C# コードを生成すると、XSD の xs:date は以下のようなコードを生成します。

[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, DataType="date")]
public System.DateTime time {
    get {
        return this.timeField;
    }
    set {
        this.timeField = value;
    }
}

XML をオブジェクトにデシリアライズする際に XmlSerializer を使用してオブジェクトにデシリアライズする場合、 すべてがうまくいくように見えます。私が直面している問題は、サービスが日付のフォーマットを YYYY-MM-DD hh:mm:ss としてフォーマットされることを期待しているのに、 XSD によって生成されたコードでは YYYY-MM-DD .

XSD を手動で修正すると xs:dateTime 型に変更すると、生成された C# コードが生成します。 2010-08-20T20:07:03.915039Z .

基本的には、どのようにシリアライズすれば YYYY-MM-DD hh:mm:ss ? XSDに何かすることがあるのでしょうか、それとも生成されたC#コードを変更するために何かできることがあるのでしょうか?

どのように解決するのですか?

過去に、datetimeのシリアライズを制御するために、以下のようなことをしていました。

  • DateTime プロパティを無視する。
  • 望みの方法でシリアライズ/デシリアライズするダミーの文字列プロパティを作成する。

以下はその例です。

public class SomeClass
{
    [XmlIgnore]
    public DateTime SomeDate { get; set; }

    [XmlElement("SomeDate")]
    public string SomeDateString
    {
        get { return this.SomeDate.ToString("yyyy-MM-dd HH:mm:ss"); }
        set { this.SomeDate = DateTime.Parse(value); }
    }
}