返回DataContract的子类

时间:2011-11-03 12:09:30

标签: wcf datacontract

我有一个DataContract,我将其用作WCF服务的返回类型。

[DataContract]
public NameResult
{
    [DataMember]
    public string Name { get; set; }
}

但是,我想在服务端存储其他信息,因此我创建了一个子类:

internal ServiceNameResult : NameResult
{
    internal Guid ID { get; set; }
}

但是,似乎我无法将此实例用作结果值(我在客户端上获得的错误不是很有用 - 无法识别的错误109(0x6d)。

基本上,如果我这样做;

NameResult GetName() 
{
    NameResult result = {...}
    return result;
}

然后它有效,但如果我这样做;

NameResult GetName()
{
    ServiceNameResult result = {...}
    return result;
}

没有。我真的不想将ServiceNameResult中的属性复制到新的NameResult。希望有一种方法可以使这项工作?

我已经将[IgnoreDataMember]放在了子类上,但没有区别。

感谢。

2 个答案:

答案 0 :(得分:0)

您需要将ServiceNameResult定义为known type

答案 1 :(得分:0)

以下是解决此问题的一种方法。您可以使用合成来实现您的目标:

internal class ServiceNameResult
{
    object OtherInformation { get; set; }

    NameResult Result { get; set; }
}

因此,您的内部服务实现可以包含对客户端返回对象的引用以及其他信息,但您不会污染您的接口。