2015-03-03 85 views
1

我試圖自定義如何從WCF服務序列化我的對象,但是序列化程序忽略了我所有的[XmlAttribute][XmlElement(DataType="date")]標記。從WCF服務中忽略XML序列化的XmlElement標記

public Invoice Get(Int32 Id) 
{ 
    return new Invoice(); 
} 

public class Invoice 
{ 
    [XmlAttribute] 
    public string Type { get; set; } 

    [XmlElement(DataType="date")] 
    public DateTime InvoiceDate { get; set; } 
    //..etc 
} 

當我調用服務,響應我得到的回覆是:

<Invoice> 
    <Type>MyType</Type> 
    <InvoiceDate>2015-03-02T22:41:22.5221045-05:00</InvoiceDate> 
</Invoice> 

我正在尋找的是:

<Invoice Type="MyType"> 
    <InvoiceDate>2015-03-02</InvoiceDate> 
</Invoice> 

回答

2

默認情況下,類將使用序列化DataContract序列化程序,所以你應該註釋你的屬性的屬性,如...

[DataContract(Name = "Invoice")] 
public class Invoice 
{ 
    [IgnoreDataMemberAttribute] 
    public string Type { get; set; } 

    [DataMember(Name = "InvoiceDate ", EmitDefaultValue = false)] 
    public DateTime InvoiceDate { get; set;} 
} 

DataContract序列化程序的默認屬性都不會導致它改變值輸出的類型,以便將DateTime截斷爲日期值。爲了達到這個目的,你需要實現接口,所以你可以在一個詳細的級別上控制類的序列化和反序列化。