C# 在为WCF服务使用XmlSerializerFormat时,如何避免包装?
我正在使用WCF创建一个soapweb服务,其中包含预定义的XSD契约,以及从该XSD自动生成的C#typeC# 在为WCF服务使用XmlSerializerFormat时,如何避免包装?,c#,.net,wcf,serialization,C#,.net,Wcf,Serialization,我正在使用WCF创建一个soapweb服务,其中包含预定义的XSD契约,以及从该XSD自动生成的C#type [ServiceContract] [XmlSerializerFormat] public interface IEBooking10 { [OperationContract] [XmlSerializerFormat] OTA_CancelRS OTA_Cancel(OTA_CancelRQ rq); } OTA_CancelR
[ServiceContract]
[XmlSerializerFormat]
public interface IEBooking10
{
[OperationContract]
[XmlSerializerFormat]
OTA_CancelRS OTA_Cancel(OTA_CancelRQ rq);
}
OTA_CancelRQ&OTA_取消器是自动生成的类型,具有相应的XML序列化属性。
参数包装在OTA_Cancel和OTA_CancelResponse元素中,如下所示:
<OTA_Cancel>
<OTA_CancelRQ> ... </OTA_CancelRQ>
</OTA_Cancel>
[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);
}
...
及
...
如何避免WCF对输入OTA_Cancel操作的参数进行包装?这不是通过序列化而是通过消息定义来处理的。目前,您使用的是默认值,即序列化数据必须被包装,但操作元素不能被包装。如果要覆盖此行为,必须使用。试着这样做:
<OTA_Cancel>
<OTA_CancelRQ> ... </OTA_CancelRQ>
</OTA_Cancel>
[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);
}
您确定消息协定可以与XML序列化程序格式一起使用吗?我希望必须使用数据契约格式,但我从未尝试过将两者结合起来。@Programming Hero:是的,我相信它们可以。数据协定控制数据的序列化,但消息协定控制消息本身。消息中的数据仍由选定的序列化方法序列化。它起作用:)轻微更正,属性不能无效,将“public void OTA_CancelRQ{get;set;}”更改为public“OTA_CancelRQ OTA_CancelRQ{get;set;}”,并用于响应。