【问题标题】:How to Deserialize from web service JSON array or object?如何从 Web 服务 JSON 数组或对象反序列化?
【发布时间】:2010-12-14 12:13:40
【问题描述】:

我在 windows phone 7 中创建了一个 web 服务应用程序。这是从下面的 uri 获取的 JSON 数组。 ...[{"id":4,"name":"Bangalore"},{"id":1,"name":"Chennai"},{"id":3,"name":"Hyderabad" },{"id":2,"name":"孟买"}]...

列表项 = (List)ds.ReadObject(msnew); 在这一行中有一个错误(它在运行时说)。 反序列化类型对象时出错。根级别的数据无效。第 1 行,位置 1。

编码:

公共主页() { 初始化组件(); }

    [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);
    }

【问题讨论】:

    标签: .net silverlight-4.0 c#-4.0 windows-phone-7


    【解决方案1】:

    您尝试做的事情有 2 个错误。

    1. 您使用的是DataContractSerializer 而不是DataContractJsonSerializer。您尝试使用的是 XML,而不是 JSON。

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

    试试这个:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多