消息合同包装名称和消息正文名称属性不起作用

时间:2015-01-21 18:24:47

标签: c# wcf

我有几个类定义为消息合约,属性定义为消息体。我分别指定了wrappername和name属性。它适用于父类,但不适用于子类。

类:

[MessageContract(WrapperName = "ticketstatus",IsWrapped = true)]
public class TicketStatusResponse
{        

    [MessageBodyMember(Name="status")]
    public string Status { get; set; }

    [MessageBodyMember(Name="errorcode")]
    public string ErrorCode { get; set; }

    [MessageBodyMember(Name="errormessage")]
    public string ErrorMessage { get; set; }

    [MessageBodyMember(Name="tasks")]
    public List<Task> Tasks { get; set; }
}

[MessageContract(WrapperName="task")]
public class Task
{
    [MessageBodyMember(Name="taskname")]
    public string TaskName { get; set; }

    [MessageBodyMember(Name="complete")]
    public string Complete { get; set; }
}

回复信息:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
  <ticketstatus xmlns="http://tempuri.org/">
     <errorcode>0</errorcode>
     <errormessage/>
     <status>Pending</status>
     <tasks xmlns:a="http://schemas.datacontract.org/2004/07/MessageContractExample.Contracts" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
        <a:Task>
           <a:Complete>1</a:Complete>
           <a:TaskName>task1</a:TaskName>
        </a:Task>
        <a:Task>
           <a:Complete>2</a:Complete>
           <a:TaskName>task2</a:TaskName>
        </a:Task>
     </tasks>
     <ticketno>567890</ticketno>
     <waittime>4</waittime>
  </ticketstatus>
</s:Body>
</s:Envelope>

我期望的xml标签名称“Task”应如下所示,因为我使用wrappername和name属性更改名称:

        <a:task>
           <a:complete>2</a:complete>
           <a:taskname>task2</a:taskName>
        </a:task>

但我得到了

       <a:Task>
           <a:Complete>1</a:Complete>
           <a:TaskName>task1</a:TaskName>
        </a:Task>

为什么包装器名称和名称属性不适用于子节点。如何修复节点名称?

有任何想法或提示吗?

1 个答案:

答案 0 :(得分:1)

您是否考虑过IsWrapped = true,因为这是类之间的差异。