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

时间:2015-03-03 03:50:59

标签: c# xml wcf

我正在尝试自定义从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>

1 个答案:

答案 0 :(得分: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截断为日期值。要实现这一点,您需要实现 IXmlSerializable 接口,以便您可以在详细级别控制类的序列化和反序列化。