我有一个WCF服务,我正在发送一个'要处理的项目列表,数百个。理想情况下,为了减少流量,我想通过标记它们来缩短属性名称。
public class Item
{
[XmlElement(ElementName = "u")]
public int UserID { get; set; }
[XmlElement(ElementName = "c")]
public string Code { get; set; }
[XmlElement(ElementName = "d")]
public DateTime Date { get; set; }
}
然而,用fiddler检查流量仍会传输长名称,即UserID,Code,Date。
有关如何让WCF使用短名称的任何想法?
答案 0 :(得分:3)
如果它不必是XmlElement
属性,则可以使用DataMember
属性(可能与类中的DataContract
属性一起使用)并将其设置为{{3相应的属性。
例如:
using System.Runtime.Serialization; // Add Reference to "System.Runtime.Serialization.dll"
[DataContract]
public class Item
{
[DataMember(Name = "u")]
public int UserID { get; set; }
[DataMember(Name = "c")]
public string Code { get; set; }
[DataMember(Name = "d")]
public DateTime Date { get; set; }
}
请注意,这具有以下效果(如果您考虑它,这是合乎逻辑的):如果您使用生成的WSDL描述(使用svcutil.exe
从中重新生成C#类,它将看起来像这样:
[DataContract]
public class Item
{
[DataMember()]
public int u { get; set; }
[DataMember()]
public string c { get; set; }
[DataMember()]
public DateTime d { get; set; }
}
如果您不想这样做,并且客户端也在您的控制之下,您可以与客户共享Item类定义(即通过包含它的通用程序集)。
答案 1 :(得分:3)
使用DataMember
属性,并提供Name
。
答案 2 :(得分:2)
试试这个,对于WCF,它是
[DataContract]
public class Item
{
[DataMember (Name="u")]
public int UserID { get; set; }
[DataMember (Name="c")]
public string Code { get; set; }
[DataMember (Name="d")]
public DateTime Date { get; set; }
}