【问题标题】:WCF DataContract DataMember orderWCF DataContract DataMember 订单
【发布时间】:2016-02-18 17:06:23
【问题描述】:

如何对 DataMember 类中的属性进行排序? 我可以在顶层订购 DataMember,但不能订购子类中的属性。 例如:

我的服务合同

[ServiceContract]
public interface IService1
{
    [OperationContract]
    WcfResponse CallMe(WcfRequest request);
}

我的服务

public class Service1 : IService1
{
    public WcfResponse CallMe(WcfRequest request)
    {
        return new WcfResponse();
    }
}

我的 DataContract 类

[DataContract]
public class WcfRequest
{
    [Required]
    [DataMember]
    public Header Header { get; set; }

    [Required]
    [DataMember]
    public Footer Footer { get; set; }
}

[DataContract]
public class WcfResponse
{
    [DataMember]
    public string Status { get; set; }
    [DataMember]
    public string Errors { get; set; }

    public WcfResponse()
    {
        Status = "FAILED";
        Errors = null;
    }
}

所以当我使用像 SoapUI 这样的工具时,我可以看到请求对象是按字母顺序序列化的(按照 WCF 默认):

     <tem:request>
        <edf:Footer>
           <edf:IsComplete>?</edf:IsComplete>
           <edf:Submitted>?</edf:Submitted>
        </edf:Footer>
        <edf:Header>
           <edf:CompanyName>?</edf:CompanyName>
           <edf:UserName>?</edf:UserName>
        </edf:Header>
     </tem:request>

如果我将 DataContract 更改为使用 Order 参数,我可以重新排序我的属性:

[DataContract]
public class WcfRequest
{
    [Required]
    [DataMember(Order = 0)]
    public Header Header { get; set; }

    [Required]
    [DataMember(Order = 1)]
    public Footer Footer { get; set; }
}

更新服务定义将给出:

     <tem:request>
        <edf:Header>
           <edf:CompanyName>?</edf:CompanyName>
           <edf:UserName>?</edf:UserName>
        </edf:Header>
        <edf:Footer>
           <edf:IsComplete>?</edf:IsComplete>
           <edf:Submitted>?</edf:Submitted>
        </edf:Footer>
     </tem:request>

正如我们所料。 我的问题是询问如何以相同的方式订购 Header & Footer 类的属性。 如果我尝试以下操作:

public class Header
{
    [DataMember(Order = 3)]
    public string UserName { get; set; }

    [DataMember(Order = 2)]
    public string CompanyName { get; set; }
}
public class Footer
{
    [DataMember(Order = 5)]
    public DateTime Submitted { get; set; }

    [DataMember(Order = 6)]
    public bool IsComplete { get; set; }
}

属性不会重新排序,仍然按字母顺序排列。

【问题讨论】:

  • 您的页眉和页脚没有DataContract 属性。
  • 克里基。写这个问题花了一段时间我很高兴这个简单的遗漏是原因。属性应用和问题排序。谢谢! @CodeCaster

标签: c# wcf


【解决方案1】:

您的页眉和页脚没有 DataContract 属性。 – CodeCaster

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-03
    • 2012-01-23
    • 2016-11-04
    • 1970-01-01
    相关资源
    最近更新 更多