2015-03-03 79 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截断为日期值。为了达到这个目的,你需要实现接口,所以你可以在一个详细的级别上控制类的序列化和反序列化。