通用参数属性上的WebService导致错误
问题描述:
错误:
的错误是与具有ChainedListNode<T>
一个类型。事情是,当我从Value
删除DataMemberAttribute
,该服务工作。
[DataContract]
public class ChainedListNode<T>
{
[DataMember]
public T Value { get; set; }
}
任何想法是什么导致它和/或如何解决它?
答
问题是,打开类型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时,它工作的原因是因为它没有被序列化,理论上没有在服务中使用,只在被支持的一端。
http://jeffbarnes.net/blog/post/2007/05/10/WCF-Serialization-and-Generics.aspx可能有帮助吗? – 2014-09-05 21:41:37