我在C#中有一个运行完美的WCF SOAP服务。但现在我想将数据类型添加到SOAP响应中。
如果我返回一个boolean或string数组,我会得到类似的结果:
<a:elements xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
<b:string>ID</b:string>
<b:string>Description</b:string>
<b:string>Material</b:string>
<b:string>Price</b:string>
</a:elements>
或
<a:updatePermissions xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
<b:boolean>true</b:boolean>
<b:boolean>false</b:boolean>
<b:boolean>false</b:boolean>
<b:boolean>false</b:boolean>
</a:updatePermissions >
但如果我发送复杂类型,我会得到类似
的内容<a:Elements>
<a:Material>
<a:Id>465</a:Id>
<a:Description>TestAddMaterial</a:Description>
<a:MaterialId>1</a:MaterialId>
<a:PriceForKg>0.03</a:PriceForKg>
</a:Material>
</a:Elements>
如何转换复杂类型的响应,如数组的响应?
类似的东西:
<a:Elements>
<a:Material>
<a:integer>465</a:integer>
<a:string>TestAddMaterial</a:string>
<a:integer>1</a:integer>
<a:double>0.03</a:double>
</a:Material>
</a:Elements>
此时不需要变量的名称。
itselfe类是带有DataMember的DataContract。
答案 0 :(得分:1)
从技术上讲,您可以返回XElement。任何自定义XML选项都需要您自己构建XML。
举个例子:
[ServiceContract]
public interface ISomeService
{
[OperationContract, XmlSerializerFormat]
XmlElement SomeMethod(XmlElement someParameter);
}
您还可以使用XmlDocument实例的DocumentElement属性,因为默认的DataContractSerializer可以序列化XmlElement个实例。
https://msdn.microsoft.com/en-us/library/ms733901.aspx
虽然上述选项不是标准做法。相反,你应该使用DataContract,它应该按照你希望它被序列化为XML的方式构建。当服务方法返回自定义类型时,WCF将隐式地将其序列化为XML文档。