2010-12-14 105 views
3

我在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); 在这一行中有一个错误(它在运行时表示)。 alt text 在根级别反序列化类型为.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); 
    } 

回答

9

你想要做的事情有两个错误。

  1. 您使用DataContractSerializer代替DataContractJsonSerializer。你试图使用的是期望XML,而不是JSON。

  2. 您试图反序列化为单个Item,然后将其转换为List<Item>,而不是数组,这是json包含的数组。

试试这个:

var ds = new DataContractJsonSerializer(typeof(Item[])); 
    var msnew = new MemoryStream(Encoding.UTF8.GetBytes(MyJsonString)); 
    Item[] items = (Item[])ds.ReadObject(msnew); 

如果以后想,你可以在阵列转换到一个列表。

+0

非常感谢,它运行良好。我做到了。 – selladurai 2010-12-15 08:19:36

1

您可以从Silverlight SDK添加System.Json库。
它不是编译为WP7,但对我来说它工作正常。