我的一个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将其公开,甚至手动流式传输对象。在所有情况下,我都会收到一些错误,最终导致其对象无法显式序列化。
答案 0 :(得分:2)
当然,编写一个包含所有相同公共属性的包装类,只需添加“get { return internalObject.ThisProperty; }
。装饰包装类,使其与WCF一起使用。
答案 1 :(得分:0)
另一种选择是编写一个Proxy类,它反映您希望使用的类型的属性,并通过WCF返回。
您可以使用AutoMapper填充代理对象。
这种方法的优点是,您的服务的消费者在尝试使用它时不需要依赖第三方库。