1

我无法实现以下场景。

我们目前有一个方法,它需要一个“上下文”键值对列表。然而,该值可以是任何类型。

目标是使用 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>
4

1 回答 1

1

在这种情况下,SoapUI 使用 .Net 技术,该技术不了解对象的目标类型。

发送对象并非在所有平台上都有效。事实上,您也可能会在使用 .Net 客户端时遇到错误。你最好的选择是创建一个通用的 xml 表示值,并让所有客户端从 xml 中膨胀对象

于 2013-03-29T16:01:45.350 回答