我无法实现以下方案。
我们目前有一种方法需要一个“上下文”键值对列表。但值可以是任何类型。
目标是使用WCF使此方法可用。所以我创建了一个
public List<Element> Transform(List<Element> elements)
{
... Transformation of elements takes place
}
[DataContract(Namespace = Constants.NAMESPACE)]
public struct Element
{
[DataMember(Order = 0, IsRequired = true)]
public string Key;
[DataMember(Order = 1, IsRequired = true)]
public object Value;
}
当我使用.Net测试项目时,一切正常。
但是,当我使用SOAP UI调用此服务时,我收到一条错误消息:
格式化程序在尝试反序列化消息时抛出异常:尝试反序列化参数元素时出错。 InnerException消息是'元素值不能将子内容反序列化为对象。请使用XmlNode []反序列化这种XML模式。'。
我无法弄清楚要做什么。任何帮助表示感谢。
我使用的xml是这样的:
<ws:Transform>
<ws:elements>
<ws:Element>
<ws:Key>Key1</ws:Key>
<ws:Value>A</ws:Value>
</ws:Element>
<ws:Element>
<ws:Key>Key2</ws:Key>
<ws:Value>B</ws:Value>
</ws:Element>
<ws:ScriptName>SetVariable</ws:ScriptName>
</ws:elements>
</ws:Transform>
答案 0 :(得分:1)
在这种情况下,SoapUI使用.Net技术,它不了解对象的目标类型。
发送对象在所有平台上无效。实际上,您也可能会遇到.Net客户端的错误。您最好的选择是创建Value的通用xml表示,并让所有客户端从xml
中膨胀对象