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>
默认情况下,类将使用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接口,以便可以在详细级别控制类的序列化和反序列化。