如何从Web服务JSON数组或对象反序列化?
问题描述:
我在windows phone 7中创建了一个web服务应用程序。这是从下面的uri获取的JSON数组。 ... [{“id”:4,“name”:“Bangalore”},{“id”:1,“name”:“Chennai”},{“id”:3,“name”:“Hyderabad “},{”id“:2,”name“:”Mumbai“}] ...如何从Web服务JSON数组或对象反序列化?
List item =(List)ds.ReadObject(msnew); 在这一行中有一个错误(它在运行时表示)。 在根级别反序列化类型为.Data的对象时出错是无效的。行1,位置1
编码:
公共的MainPage() { 的InitializeComponent(); }
[DataContract]
public class Item
{
[DataMember]
public int id
{
get;
set;
}
[DataMember]
public string name
{
get;
set;
}
}
private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
{
WebClient wc = new WebClient();
wc.DownloadStringAsync(new Uri("http://75.101.161.83:8080/CityGuide/[email protected]$pir*$y$t*m$13GUID*5"));
wc.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wc_DownloadStringCompleted);
}
void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
string MyJsonString = e.Result;
// MessageBox.Show(e.Result);
DataContractSerializer ds = new DataContractSerializer(typeof(Item));
MemoryStream msnew = new MemoryStream(Encoding.UTF8.GetBytes(MyJsonString));
List<Item> item = (List<Item>)ds.ReadObject(msnew);
}
答
你想要做的事情有两个错误。
您使用
DataContractSerializer
代替DataContractJsonSerializer
。你试图使用的是期望XML,而不是JSON。您试图反序列化为单个
Item
,然后将其转换为List<Item>
,而不是数组,这是json包含的数组。
试试这个:
var ds = new DataContractJsonSerializer(typeof(Item[]));
var msnew = new MemoryStream(Encoding.UTF8.GetBytes(MyJsonString));
Item[] items = (Item[])ds.ReadObject(msnew);
如果以后想,你可以在阵列转换到一个列表。
答
您可以从Silverlight SDK添加System.Json库。
它不是编译为WP7,但对我来说它工作正常。
非常感谢,它运行良好。我做到了。 – selladurai 2010-12-15 08:19:36