通用参数属性上的WebService导致错误

问题描述:

服务:通用参数属性上的WebService导致错误

enter image description here错误:

的错误是与具有ChainedListNode<T>一个类型。事情是,当我从Value删除DataMemberAttribute,该服务工作。

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

任何想法是什么导致它和/或如何解决它?

+0

http://jeffbarnes.net/blog/post/2007/05/10/WCF-Serialization-and-Generics.aspx可能有帮助吗? – 2014-09-05 21:41:37

问题是,打开类型ChainedListNode<T>中的类型参数意味着ChainedListNode<T>.Value可能包含任何内容。 WCF无法创建描述可能放置在Value属性中的所有可能值的合同,因此它会拒绝整个类型。当没有Value属性时,类型参数T是不相关的,并且被忽略,并且一切正常。

在类似的情况下,我已经创建从我的泛型类型派生的封闭式和使用的类型,我的数据合同:

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

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

我不认为泛型是在WCF中使用的好主意,因为在这种情况下我看不到一个好的序列化,即使你可以实现它,尽管我不确定它是否可行,但我会认为你最终可能会得到错误。

当你删除DataMember时,它工作的原因是因为它没有被序列化,理论上没有在服务中使用,只在被支持的一端。