2012-01-13 11 views
2

私はこれは私が私がRESTサービスC#のDataContractSerializer問題

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> 
    <Item> 
    <Param1>param1 value</Param1> 
    <Param2>param2 value</Param2> 
    </Item> 
    <Item> 
    <Param1>param1 value</Param1> 
    <Param2>param2 value</Param2> 
    </Item> 
</CollectionOfItems> 

の形でXMLを返す安らかサービスからデータを引っ張っています<CollectionOfItems>

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

そしてを保持するクラスに一致するクラスを持っています0

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

     [DataMember(Name="Param2")] 
     public string param2{ get; set; } 
    } 

私の問題は、私はリストボックスに結果をバインドするとき、私は結果の正確な数を持っていますが、私は唯一の空白行として結果を参照してくださいオブジェクトで終わるということです。私は<Item>の正しい量の<CollectionOfItems>を持っているようですが、私はparam1やparam2などの値は表示されません....

+0

結果をListBoxにバインドする方法を教えてください。 'getmetadata'によって返されたオブジェクトをCollectionOfItemsにキャストすると、デバッガで正しい値が表示されますか? – RBDev

+0

悲しいことに、それらはデバッガでもすべてnullです。 xの結果を示し、正しいクラスを見つけました。また、param1、param2などを示しています...しかし、NULLSとして – Oli

+0

私は結果を真っ直ぐに破るよxmlSer.ReadObject(リーダー);結果の内容を見る – Oli

答えて

0

友人は私のためにこの1つを解決しました。似たような問題を抱えている人のための答えがここにあります。ネームスペースは、コレクションdataatontontractで宣言されていなければなりません。 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; } 
    }