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

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

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

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

编码:

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

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

最佳答案

您尝试执行的操作存在 2 个错误。

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

如果您以后愿意,可以将数组转换为列表。

关于.net - 如何从 Web 服务 JSON 数组或对象反序列化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4439020/

相关文章:

c# - 从 Windows 窗体到 WPF

c# - TakeUntil 没有按记录工作?

c# - 构建网络用户界面

silverlight-4.0 - 在 Silverlight 中使用属性绑定(bind)更改 DataTemplate

c# - MVVM Xamarin Forms - 绑定(bind) View 模型属性的命令参数

c# - 我将如何在报告查看器控件的报告服务中创建此报告?

c# - 如何在泛型集合上创建扩展方法

.net - Silverlight 4.0 和 WCF 客户端代理 - 如何创建和关闭实例

c# - DbDataReader 错误 : Invalid attempt to call Read when reader is closed

asp.net - 如何通过 System.Web.UI.DataVisualization.Chart 使用透明度