c# DataContractSerializer issue

本文关键字:issue DataContractSerializer | 更新日期: 2023-09-27 18:20:17

我从一个restful服务中提取数据,该服务以的形式返回XML

<CollectionOfItems>
  <Item>
    <Param1>param1 value</Param1>
    <Param2>param2 value</Param2>
  </Item>
  <Item>
    <Param1>param1 value</Param1>
    <Param2>param2 value</Param2>  
  </Item>
</CollectionOfItems>

这是我用来消费其余服务的方法

public object getMetaData(string uri, Type type)
    {
        //Create Object To Be Returned
        object result = null;
        //Create Web Request
        HttpWebRequest request = WebRequest.Create(uri) as HttpWebRequest;
        //Get Response
        using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
        {
            if (request.HaveResponse && response != null)
            {
                using (Stream reader = response.GetResponseStream())
                {
                    DataContractSerializer xmlSer = new DataContractSerializer(type);
                    result = xmlSer.ReadObject(reader);
                }
            }
        }
        return result;
    }

我有一个类来匹配<CollectionOfItems>

[CollectionDataContract(Name = "CollectionOfItems", Namespace = "http://matchingnamespace")]
    public class CollectionOfItems: List<Item>
    {
    }

和一个类来保存<Item>

[DataContract(Name="Item")]
    public class Item
    {
        [DataMember(Name="Param1")]
        public string param1{ get; set; }
        [DataMember(Name="Param2")]
        public string param2{ get; set; }
    }

我的问题是,当我将结果绑定到Listbox时,我最终得到的对象具有正确数量的结果,但我只将结果视为空行。我似乎有一个<CollectionOfItems>和正确量的<Item>,但我看不到param1或param2等的任何值…

c# DataContractSerializer issue

一个朋友刚刚帮我解决了这个问题。下面是有类似问题的人的答案。如果命名空间存在于collectiondatacontract中,则还必须在Item数据合约中声明该命名空间。I.E

[DataContract(Name="Item", Namespace = "http://matchingnamespace")] 
    public class Item 
    { 
        [DataMember(Name="Param1")] 
        public string param1{ get; set; } 
        [DataMember(Name="Param2")] 
        public string param2{ get; set; } 
    }