我有一个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();
}
答案 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类中。它将自动反序列化。该类应该是您的客户端数据协定类,而不是服务器端数据类。
最后,这些字段的值似乎为空。我们应该确保服务器和客户端数据协定具有相同的名称空间。它不能是默认值(http://tempuri.org)。正如我在上面定义的那样,此名称空间属性应与服务器端值一致。
请随时告诉我是否有什么我可以帮助的。