c # DataContractSerializer проблема - PullRequest
       10

c # DataContractSerializer проблема

2 голосов
/ 13 января 2012

Я извлекаю данные из сервиса restful, который возвращает XML в виде

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

. Этот метод я использую для использования сервиса rest

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; }
    }

Моя проблема в том, что когда я связываю результат со списком Iв итоге получим объект с правильным количеством результатов, но я вижу результаты только в виде пустых строк.Кажется, у меня <CollectionOfItems> с правильным значением <Item>, но я не вижу значений для param1 или param2 и т. Д. ...

1 Ответ

0 голосов
/ 14 января 2012

Друг только что решил это для меня. Вот ответ для любого, имеющего подобную проблему. Пространство имен также должно быть объявлено в datacontract элемента, если оно присутствует в collectiondatacontract. * 1001 то есть *

[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; } 
    } 
...