通用参数属性会导致WebService出错

时间:2014-09-05 21:18:47

标签: c# web-services wcf service datamember

服务

enter image description here错误:

错误的类型为ChainedListNode<T>。事实是,当我从DataMemberAttribute中移除Value时,服务就会正常工作。

[DataContract]
public class ChainedListNode<T>
{
    [DataMember]
    public T Value { get; set; }
}

任何关于导致它和/或如何解决它的想法?

2 个答案:

答案 0 :(得分:0)

我不认为泛型在WCF中使用是个好主意,因为在这种情况下我没有看到好的序列化,即使你能够实现它,虽然我不确定它是否可行,但我认为您最终可能仍会收到错误。

当您删除DataMember时它的工作原因是因为它理论上没有在序列化中仅在备份端使用该服务。

答案 1 :(得分:0)

问题是打开类型ChainedListNode<T>中的type参数意味着ChainedListNode<T>.Value可以包含任何内容。 WCF无法创建描述可以放在Value属性中的所有可能值的契约,因此它拒绝整个类型。如果没有Value属性,则类型参数T无关紧要并被忽略,一切正常。

在类似的情况下,我创建了一个从我的泛型类型派生的封闭类型,并将该类型用作我的数据契约:

[DataContract]
public class ChainedListNodeOfString : ChainedListNode<string>
{
    [DataMember]
    public string Value { get; set; }
}

如果需要,您可以为需要返回的每种不同类型的值创建派生类型(以及相关的OperationContract)。这使您的API更加冗长,但它可以正常工作。