2016-04-01 7 views
0

私は自分のクラスを作成するために使用したXSDを持っています。 XML出力を取得すると、すべてのdatetimeデータ型はシリアル化されません。私はシリアライズ時に何のエラーもありません。私はサンプルのShipDateを使いました。私はスキーマツールがプロセスに影響を与えるいくつかのプロパティを追加しているかどうかわかりません。たとえば、ShipDateSpecifiedはXMLIgnoreAttributeです。事前にC#シリアライズでデータ型datetimeをシリアル化せず、文字列のみ

おかげ

C#の

shipHdr.TradingPartnerId = "000ALLTESTID"; 
shipHdr.ShipmentIdentification = "321654987"; 
shipHdr.ShipDate = Convert.ToDateTime("2016-03-23"); 
shipHdr.CarrierProNumber = "895934589485948353"; 
shipHdr.AppointmentNumber = "24601"; 

出荷クラス

private System.DateTime shipDateField; 
private bool shipDateFieldSpecified; 

/// <remarks/> 
[System.Xml.Serialization.XmlElementAttribute(DataType="date")] 
public System.DateTime ShipDate { 
    get { 
     return this.shipDateField; 
    } 
    set { 
     this.shipDateField = value; 
    } 
} 

/// <remarks/> 
[System.Xml.Serialization.XmlIgnoreAttribute()] 
public bool ShipDateSpecified { 
    get { 
     return this.shipDateFieldSpecified; 
    } 
    set { 
     this.shipDateFieldSpecified = value; 
    } 
} 

XML出力

<ShipmentHeader> 
     <TradingPartnerId>000ALLTESTID</TradingPartnerId> 
     <ShipmentIdentification>321654987</ShipmentIdentification> 
     <CarrierProNumber>895934589485948353</CarrierProNumber> 
     <AppointmentNumber>24601</AppointmentNumber> 
    </ShipmentHeader> 

答えて

1

は手動ShipDateSpecifiedを設定する必要があります。 XSDはおそらくこれがオプションの要素であると指定します。

をシリアル化しようとする前に、XmlSerializerは、<ElementName>Specifiedのプロパティを秘密にチェックします。

常にShipDateを指定する場合は、ShipDateSpecifiedプロパティを削除するだけで済みます。

+0

関連文書については、[XmlSerializerをクラス:生成されたXMLをコントロール](https://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer.aspx)と探し* propertyName指定*。 – dbc

+0

まずはおかげさまで、これは正常な動作ですか、を指定しましたか? – daniel2078

+1

これはデフォルトの 'XmlSerializer'動作ですが、私の意見ではクラスを汚染していません。 null可能な 'DateTime? '型を許可するのは良いでしょうが、シリアライザに' null'値を書くのか、要素全体を省略するのかを伝える方法が必要です。 –

0

要素が必要ですか?それを属性としてマークすると、それがシリアル化されます。

[XmlAttribute(DataType = "date")] 
public System.DateTime ShipDate { get; set; } 
関連する問題