WCF缩短字段名称(XmlElement)?

时间:2012-01-13 11:43:02

标签: .net wcf

我有一个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使用短名称的任何想法?

3 个答案:

答案 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; }
}