我正在尝试自定义从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>
答案 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 接口,以便您可以在详细级别控制类的序列化和反序列化。