WCF - 没有序列化返回对象?

时间:2010-12-29 22:59:45

标签: wcf serialization

我的一个WCF函数返回一个对象,该对象具有一个不受我控制的另一个库中的类型的成员变量。我无法装饰该库的类。实际上,我甚至不能使用DataContractSurrogate,因为库的类具有对操作至关重要的私有成员变量(即如果我返回没有那些私有成员变量的对象,则公共属性会抛出异常)。

如果我说不需要这种特定方法的互操作性(至少在此库的所有者可以修改以使其对象可序列化之前),我是否可以使用WCF返回此对象,以便它可以在至少被.NET客户端使用?

我该怎么做?

更新:我在下面添加伪代码......

// My code, I have control

[DataContract]
public class MyObject
{
  private TheirObject theirObject;

  [DataMember]
  public int SomeNumber
  {
    get { return theirObject.SomeNumber; } // public property exposed
    private set { }
  }
}

// Their code, I have no control

public class TheirObject
{
  private TheirOtherObject theirOtherObject;

  public int SomeNumber 
  { 
    get { return theirOtherObject.SomeOtherProperty; }
    set { // ... }
  }
}

我尝试将DataMember添加到我的对象实例中,使用DataContractSurrogate将其公开,甚至手动流式传输对象。在所有情况下,我都会收到一些错误,最终导致其对象无法显式序列化。

2 个答案:

答案 0 :(得分:2)

当然,编写一个包含所有相同公共属性的包装类,只需添加“get { return internalObject.ThisProperty; }。装饰包装类,使其与WCF一起使用。

答案 1 :(得分:0)

另一种选择是编写一个Proxy类,它反映您希望使用的类型的属性,并通过WCF返回。

您可以使用AutoMapper填充代理对象。

这种方法的优点是,您的服务的消费者在尝试使用它时不需要依赖第三方库。