使用XmlSerializerFormat进行WCF服务时如何避免换行?

时间:2011-12-30 14:13:58

标签: c# .net wcf serialization

我正在使用WCF创建一个SOAP Web服务,具有预定义的XSD契约,以及从该XSD自动生成的C#类型。

 [ServiceContract]
 [XmlSerializerFormat]
 public interface IEBooking10
 {
       [OperationContract]
       [XmlSerializerFormat]
       OTA_CancelRS OTA_Cancel(OTA_CancelRQ rq);
 }

OTA_CancelRQ& OTA_CancelRS是自动生成的类型,具有相应的XML序列化属性。 参数包含在OTA_Cancel和OTA_CancelResponse元素中,如下所示:

<OTA_Cancel>
   <OTA_CancelRQ> ... </OTA_CancelRQ>
</OTA_Cancel>

<OTA_CancelResponse>
   <OTA_CancelRS> ... </OTA_CancelRS>
</OTA_CancelResponse>

如何避免将WCF包装为输入OTA_Cancel操作的参数?

1 个答案:

答案 0 :(得分:2)

这不是通过序列化处理,而是通过消息定义处理。目前您使用的默认值表示必须包装序列化数据但操作元素。如果要覆盖此行为,则必须使用message contracts。尝试这样的事情:

[MessageContract(IsWrapped = false)]
public class OTA_CancelRQMessage
{
    [MessageBodyMember]
    public void OTA_CancelRQ { get; set; }
}

[MessageContract(IsWrapped = false)]
public class OTA_CancelRSMessage
{
    [MessageBodyMember]
    public void OTA_CancelRS { get; set; }
}

[ServiceContract]
[XmlSerializerFormat]
public interface IEBooking10
{
   [OperationContract]
   [XmlSerializerFormat]
   OTA_CancelRSMessage OTA_Cancel(OTA_CancelRQMessage rq);
}