【问题标题】:How can Deserialize with Javascript Serializer? (ASP.net)如何使用 Javascript 序列化器反序列化? (ASP.net)
【发布时间】:2011-02-15 19:10:49
【问题描述】:
public class SocialFriends
    {
        public string id { get; set; }
        public string name { get; set; }
    }

这是我的班级。

List<SocialFriends> oList2 = ser.Deserialize<List<SocialFriends>>(response.Content);

我正在获取这样的数据。但它返回 0 个数据:S

数据在这里

{"data":[{"name":"George","id":"511222445"},{"name":"Mayk","id":"517247768"}]}

我无法解释这个问题?谁能说,我的错在哪里?

【问题讨论】:

    标签: asp.net json list serialization


    【解决方案1】:

    创建一个类

    class Data 
    {
        public SocialFriends[] data { get; set; }
    }
    

    并将您的代码更改为:

    Data oList2 = ser.Deserialize<Data>(response.Content);
    

    【讨论】:

    • 我使用了您的解决方案,它有效,谢谢。我得到了这样的数据。 foreach (varfriend in oList2.data) Response.Write(friend.id);
    • 太棒了!我很高兴能帮上忙。
    【解决方案2】:

    此代码有效。

    public class SocialFriendsData
    {
        public List<SocialFriends> Data { get; set; }
    }
    
    public class SocialFriends
    {
        public string id { get; set; }
        public string name { get; set; }
    }
    

    反序列化:

     JavaScriptSerializer ser = new JavaScriptSerializer();
     string response = "{\"data\":[{\"name\":\"George\",\"id\":\"511222445\"},{\"name\":\"Mayk\",\"id\":\"517247768\"}]}";
     SocialFriendsData oList2 = ser.Deserialize<SocialFriendsData>(response);
    

    【讨论】:

      【解决方案3】:

      您的 JSON 包含在 data 属性中。您必须从 data 属性中获取 JSON 字符串。我不知道您使用哪个 JSON 序列化程序,但根据您提供的内容,最简单的方法可能只是创建一个中间 DataHolder 类:

      public class DataHolder
      {
          public string Data { get; set; }
      }
      

      然后像这样反序列化它:

      var dataHolder = ser.Deserialize<DataHolder>(response.Content);
      var oList2 = ser.Deserialize<List<SocialFriends>>(dataHolder.Data);
      

      如果您使用像 Json.NET 这样强大的 JSON 序列化程序,您甚至可以跳过中间反序列化并将您的 DataHolder 类型更改为正确的类型:

      public class DataHolder
      {
          public List<SocialFriends> SocialFriends { get; set; }
      }
      

      然后使用这段代码获取数据:

      var dataHolder = ser.Deserialize<DataHolder>(response.Content);
      var oList2 = dataHolder.SocialFriends;
      

      【讨论】:

      • 这完全取决于您的 JSON 序列化程序。我知道 Json.NET 不在乎。
      猜你喜欢
      • 2012-06-30
      • 1970-01-01
      • 2010-10-20
      • 2011-04-06
      • 1970-01-01
      • 2019-02-02
      • 2022-12-17
      • 1970-01-01
      相关资源
      最近更新 更多