IExtensibleDataObject 用于不同的目的。假设您有如下操作:
[DataContract]
public class MyObject
{
[DataMember]
public string MyMember { get; set; }
}
[ServiceContract]
public class MyService
{
[OperationContract]
public MyObject Operation(MyObject object)
{
object.MyMember += " modified";
return object;
}
}
预期的行为是 Operation 返回修改后的参数。
现在假设您在客户端修改数据协定:
[DataContract]
public class MyObject
{
[DataMember]
public string MyMember { get; set; }
[DataMember]
public string MyNewMember { get; set; }
}
现在让我们调用操作:
var client = new MyServiceClient();
var myObject = new MyObject
{
MyMember = "Member",
MyNewMember = "Some value"
};
MyObject returnedObject = client.Operation(myObject);
服务的数据契约没有实现 IExtensibleDataObject 并且它不知道 MyNewMember 属性。ReturnedObject.MyNewMember 中的值是多少?它将为空。但是,如果您在服务器端实现 IExtensibleDataObject,即使服务器对此属性一无所知,它也会是“某些值”。