如何从Web服务JSON数组或对象反序列化?

sel*_*rai 3 .net silverlight-4.0 windows-phone-7 c#-4.0

我在Windows Phone 7中创建了一个Web服务应用程序.这是从下面的uri获取的JSON数组.... [{ "ID":4 "名称": "班加罗尔"},{ "ID":1, "名称": "奈"},{ "ID":3 "名称": "海得拉巴" },{ "ID":2, "名": "孟买"}] ...

列表项=(列表)ds.ReadObject(msnew); 在这一行中有一个错误(它在运行时说). 替代文字 反序列化type对象时出错.根级别的Data无效.第1行,第1位.

编码:

public 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/Cities?authId=CITY4@$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);
    }
Run Code Online (Sandbox Code Playgroud)

Mat*_*cey 9

你要做的事情有2个错误.

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

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

试试这个:

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

如果您以后想要,可以将数组转换为列表.