Проблема заключается в том, что параметр типа в открытом виде ChainedListNode<T>
означает, что ChainedListNode<T>.Value
может содержать что угодно вообще. WCF не может создать контракт, который описывает все возможные значения, которые могут быть помещены в свойство Value
, поэтому он отвергает весь тип. Когда нет свойства Value
, параметр типа T
не имеет значения и игнорируется, и все работает нормально.
В подобных ситуациях я создал замкнутый тип, производный от моего общего типа и использовать этот тип в моем контракте данных:
[DataContract]
public class ChainedListNodeOfString : ChainedListNode<string>
{
[DataMember]
public string Value { get; set; }
}
Если вам нужно, вы можете создать производный тип (и связанный с ним OperationContract
) для каждого разного значения, которое нужно вернуть. Это делает ваш API более подробным, но он работает.
http://jeffbarnes.net/blog/post/2007/05/10/WCF-Serialization-and-Generics.aspx может помочь? –