【问题标题】:Generic argument property causes error on WebService通用参数属性导致 WebService 出错
【发布时间】:2014-09-05 21:18:47
【问题描述】:

服务:

错误:

错误与具有ChainedListNode<T> 的类型有关。问题是,当我从 Value 中删除 DataMemberAttribute 时,该服务可以正常工作。

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

对导致它的原因和/或如何解决它有任何想法吗?

【问题讨论】:

标签: c# web-services wcf service datamember


【解决方案1】:

问题是开放类型ChainedListNode&lt;T&gt; 中的类型参数意味着ChainedListNode&lt;T&gt;.Value 可以包含任何内容。 WCF 无法创建描述所有可能放置在 Value 属性中的值的协定,因此它拒绝整个类型。当没有Value 属性时,类型参数T 无关紧要,被忽略,一切正常。

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

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

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

【讨论】:

    【解决方案2】:

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

    删除 DataMember 时它起作用的原因是,理论上它没有被序列化,仅在后端的服务中没有使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-29
      • 2011-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-28
      • 2020-04-06
      相关资源
      最近更新 更多