【问题标题】:WCF DataContract with custom List Attribute具有自定义列表属性的 WCF DataContract
【发布时间】:2012-12-09 11:25:36
【问题描述】:

我有一个 WCF 网络服务,它公开了这些类:

  [DataContract]
    public class TemplatesFormat
    {        
        List<DynAttribute> _dynsattributes = new List<DynAttribute>();

        [DataMember]
        public List<DynAttribute> DynsAttributes
        {
            get { return _dynsattributes; }
            set { _dynsattributes = value; }
        }
    }

    [DataContract]
    public class DynAttribute
    {
        string _key = "";
        string _val = "";
        [DataMember]
        public string Key
        {
            get { return _key; }
            set { _key = value; }
        }
        [DataMember]
        public string Value
        {
            get { return _val; }
            set { _val = value; }
        }
    }

基本上,2 类。 DynAttribute 具有 2 个字符串属性和 TemplatesFormat,其属性是 DynAttribute 类的列表。 到目前为止,一切顺利。

但是,当我从 ASP.NET 网页引用 Web 服务并尝试使用 TemplatesFormat 时,我看不到 List 属性。

我的意思是,我实际上“看到”了它,但它不是一个列表(不包含“Add()”)而且我不知道如何使用它。

我认为我缺少与 de [DataContrat] 相关的内容以及它是自定义类型的事实,因为 DynAttribute 类没有相同的问题(我看到 Key 和 Value 属性,因为它们是字符串) 但是,我无法将它用于列表...

有什么想法???

【问题讨论】:

    标签: asp.net wcf web-services


    【解决方案1】:

    当您添加对 wcf 服务的引用时,您需要将 Collection Type 更改为 Generic List。 更多详情和截图请看我的帖子wcf-proxy-returning-array-instead-of-list-even-though-collection-type-generic

    【讨论】:

    • 谢谢,这篇文章对我很有帮助!!
    【解决方案2】:

    WCF 旨在支持许多其他平台的消费。因为List&lt;DynAttribute&gt; 不是原始类型,它很可能会将其转换为DynAttribute[]

    在您的消费应用程序中。尝试获取您的变量,看看您是否可以将其 .ToList() 转换回您所期望的 List&lt;DynAttribute&gt;

    【讨论】:

    • 而且没有办法告诉它也序列化 List
    • @Jeffery Khan 这不是真的,你可以拥有 List 没有任何问题
    • 我个人更喜欢将它们保留为数组,但对于您要查找的内容,它看起来像是客户端,您需要反序列化为 List&lt;T&gt;。看看下面 Gregor 的回答。
    猜你喜欢
    • 2011-01-30
    • 2011-02-04
    • 2013-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-27
    • 1970-01-01
    相关资源
    最近更新 更多