我正在尝试创建一个将使用WCF自托管的SOAP Web服务。 Web服务的架构由客户端决定,不能更改。
这是我的网络方法(为便于说明而简化):
[ServiceContract(Namespace = "http://example.com/")]
public interface IOrderService
{
[OperationContract]
void SendOrder(string Name,Order[] Orders);
}
public class OrderService : IOrderService
{
public void SendOrder(string Name,Order[] Orders)
{
// ...
}
}
这是它使用的Order类:
[DataContract(Namespace = "http://example.com/")]
public class Order
{
[DataMember]
public string Number { get; set; }
[DataMember]
public string Item { get; set; }
}
我的问题是,调用此Web服务所需的SOAP主体如下所示:
<exam:SendOrder>
<exam:Name>John Doe</exam:Name>
<exam:Orders>
<exam:Order>
<exam:Number>1234</exam:Number>
<exam:Item>iPhone</exam:Item>
</exam:Order>
<!-- More orders go here -->
</exam:Orders>
</exam:SendOrder>
但是我需要删除“ Orders”标签,以使结构更扁平,如下所示:
<exam:SendOrder>
<exam:Name>John Doe</exam:Name>
<exam:Order>
<exam:Number>1234</exam:Number>
<exam:Item>iPhone</exam:Item>
</exam:Order>
<!-- More orders go here -->
</exam:SendOrder>
我一直找不到解决方法。如果订单数组是类中的字段(而不是Web方法中的参数),则可以使用XmlElement属性对其进行标记,并使用XmlSeralizer来获得所需的结果。但是这种方法不适用于网络方法参数。
是否有任何方法可以让.NET创建实现上述扁平模式的Web服务?