WCF返回带有对象字段的Class

时间:2014-07-29 12:02:39

标签: c# wcf datacontract datamember

我有一个Wcf服务,可以作为RestApi

使用
[KnownType(typeof(myClass1))]
[KnownType(typeof(myClass2))]
[KnownType(typeof(myClassAndOther23typesOmmited))]
[DataContract]
public class ApiResult
{
    [DataMember]
    public bool Success { get; private set; }

    [DataMember]
    public object Result { get; private set; }
}

字段Result是有问题的部分,它不能被序列化,因为它是对象类型。所以问题是,如何返回正确的ApiResult对象。

注意

当我尝试将KnownTypeAttribute分配给ApiResult string[]字段并返回客户端时,有Result,服务抛出 SerializationException

UPD

尝试ApiResult<T>后 服务编译成功,intellisense给出了这个 Intellisense Suggestion for generic types

经过一些调查后,我们收集到那些奇怪的类型名称,以避免服务中的冲突(它是由GetHash()字面对象实现的简单类型哈希码,

这是对 nvoigt 解决方案的回应,因为无法插入图片进行评论

1 个答案:

答案 0 :(得分:2)

为什么不创建通用的ApiResult:

[DataContract]
public class ApiResult<T>
{
    [DataMember]
    public bool Success { get; internal set; }

    [DataMember]
    public T Result { get; internal set; }
}

这样,您的方法实际上可以返回类似ApiResult<myClass1>的类型值,而您根本不需要任何KnownType