WCF反序列化类型对象属性

时间:2013-03-29 14:39:16

标签: wcf deserialization soapui

我无法实现以下方案。

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

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

1 个答案:

答案 0 :(得分:1)

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

发送对象在所有平台上无效。实际上,您也可能会遇到.Net客户端的错误。您最好的选择是创建Value的通用xml表示,并让所有客户端从xml

中膨胀对象