如何从WCF响应的ExtensionDataObject中获取值

时间:2019-12-26 00:02:47

标签: c# asp.net wcf

我有一个WCF服务,该服务在运行时作为附加的快照返回ExtensionDataObject: 我为这些对象的价值而震惊。任何人都可以在这里提供帮助:

尝试使用反射对下面的代码进行操作,这将导致参数计数丢失异常

  List<System.Runtime.Serialization.ExtensionDataObject> extData = temp.Select(x => x.ExtensionData).ToList();
             var GetCountry = extData.GetType().GetProperties();

              string Country = string.Empty;
                foreach (var property in GetCountry)
                {
                    string name = property.Name;
                    object value = property.GetValue(extData, null);
                    if (name == "Country")
                        Country = value.ToString();

                }

enter image description here

1 个答案:

答案 0 :(得分:0)

生成Extensiondataobject字段是为了控制服务器和客户端之间的数据协定不兼容,因此它将返回一个名为extensiondataobject的字段。换句话说,您的客户数据合同实现了IExtensionDataObject接口。

    [DataContract(Namespace="abcd")]
    public class Product: IExtensibleDataObject
    {
        [DataMember]
        public int ID { get; set; }
        [DataMember]
        public string Name { get; set; }
        public ExtensionDataObject ExtensionData { get ; set ; }
}

如果我们通过Fiddle捕获此请求,您甚至可以直接查看所有数据。 简而言之,您只需要将Country属性添加到X对象的Data类中。它将自动反序列化。该类应该是您的客户端数据协定类,而不是服务器端数据类。
enter image description here
最后,这些字段的值似乎为空。我们应该确保服务器和客户端数据协定具有相同的名称空间。它不能是默认值(http://tempuri.org)。正如我在上面定义的那样,此名称空间属性应与服务器端值一致。
请随时告诉我是否有什么我可以帮助的。

相关问题