WCF服务的XML序列化忽略了XmlElement标记

本文关键字:XmlElement 标记 序列化 服务 XML WCF | 更新日期: 2024-09-20 12:44:49

我正在尝试自定义如何从WCF服务序列化我的对象,但是序列化程序忽略了我的所有[XmlAttribute][XmlElement(DataType="date")]标记。

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>

WCF服务的XML序列化忽略了XmlElement标记

默认情况下,类将使用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截断为一个日期值。要实现这一点,您需要实现IXmlSerializable接口,以便可以在详细级别控制类的序列化和反序列化。