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等的任何值…
一个朋友刚刚帮我解决了这个问题。下面是有类似问题的人的答案。如果命名空间存在于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; }
}