首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WCF DataContract DataMember命令

WCF DataContract DataMember命令
EN

Stack Overflow用户
提问于 2015-11-17 10:50:41
回答 1查看 675关注 0票数 1

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

我的ServiceContract

代码语言:javascript
复制
[ServiceContract]
public interface IService1
{
    [OperationContract]
    WcfResponse CallMe(WcfRequest request);
}

我的服务

代码语言:javascript
复制
public class Service1 : IService1
{
    public WcfResponse CallMe(WcfRequest request)
    {
        return new WcfResponse();
    }
}

我的DataContract类

代码语言:javascript
复制
[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的默认值):

代码语言:javascript
复制
     <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参数,则可以重新排序我的属性:

代码语言:javascript
复制
[DataContract]
public class WcfRequest
{
    [Required]
    [DataMember(Order = 0)]
    public Header Header { get; set; }

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

更新服务定义将提供:

代码语言:javascript
复制
     <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>

正如我们所期望的。我的问题是,如何以同样的方式排序页眉和页脚类的属性。如果我尝试以下几点:

代码语言:javascript
复制
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; }
}

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-14 11:19:53

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33755054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档