【问题标题】:How to deserialize json data in windows phone?如何反序列化windows phone中的json数据?
【发布时间】:2013-11-05 06:45:51
【问题描述】:

最初我的 json 格式是这样的,

"code": 0,
"message": "success",
"students": [
    {
        "id": "257633000000070001",
        "name": "hjeke",
        "percentage": 36,
        "type": "Good",
    },
    {
        "id": "257633000000073001",
        "name": "Second",
        "percentage": 4,
        "type": "bad",
    }]

所以我使用以下类使用 Newtonsoft.json 进行反序列化

[DataContract]
public class students
{
    [DataMember(Name = "code")]
    public int Code { get; set; }

    [DataMember(Name = "message")]
    public string Message { get; set; }

    [DataMember(Name = "students")]
    public StudentDetail StudentDetail { get; set; }
}
[DataContract]
public class StudentDetail 
{
    [DataMember(Name = "id")]
    public string ID { get; set; }

    [DataMember(Name = "name")]
    public string Name { get; set; }

    [DataMember(Name = "percentage")]
    public double PercentageForEdit { get; set; }

    [DataMember(Name = "type")]
    public string Type { get; set; }
}

但是现在我的json变成了,

"code": 0,
"message": "success",
"students": {
    "details":{
        "hjeke": {
            "id": "257633000000070001",
            "name": "hjeke",
            "percentage": 36,
            "type": "Good",
        },
        "Second": {
            "id": "257633000000073001",
            "name": "Second",
            "percentage": 4,
            "type": "bad",
        }
      }
  }

我应该如何改变我的students班级,

  StudentDetails = JsonConvert.DeserializeObject<Students>(data);

【问题讨论】:

    标签: c# json windows-phone


    【解决方案1】:

    如果您使用 Newtonsoft.Json,请尝试使用该类:

    public class StudentDetails
    {
        public string id { get; set; }
        public string name { get; set; }
        public int percentage { get; set; }
        public string type { get; set; }
    }
    
    public class Student
    {
        public int code { get; set; }
        public string message { get; set; }
        public List<StudentDetails> students { get; set; }
    }
    

    之后,您可以使用该类通过以下方式反序列化响应:

    var parsedResponse = JsonConvert.DeserializeObject<Student>(data);
    

    附:当然,不要忘记[DataContract][DataMember] 属性

    【讨论】:

    • 我刚刚测试了该解决方案,即使没有 DataContract 属性它也能正常工作。
    【解决方案2】:

    首先,您的 Json 似乎无效,对象 { } 缺少周围的括号。 要找到匹配的 C# 类,有一个不错的转换器 on this site

    对于您的第二个带有对象括号的 Json:

    "code": 0,
    "message": "success",
    "students": {
    "details":{
        "hjeke": {
            "id": "257633000000070001",
            "name": "hjeke",
            "percentage": 36,
            "type": "Good",
        },
        "Second": {
            "id": "257633000000073001",
            "name": "Second",
            "percentage": 4,
            "type": "bad",
        }
      }
    }
    

    它建议这些类:

    public class Hjeke
    {
      public string id { get; set; }
      public string name { get; set; }
      public int percentage { get; set; }
      public string type { get; set; }
    }
    
    public class Second
    {
      public string id { get; set; }
      public string name { get; set; }
      public int percentage { get; set; }
      public string type { get; set; }
    }
    
    public class Details
    {
      public Hjeke hjeke { get; set; }
      public Second Second { get; set; }
    }
    
    public class Students
    {
      public Details details { get; set; }
    }
    
    public class RootObject
    {
      public int code { get; set; }
      public string message { get; set; }
      public Students students { get; set; }
    }
    

    您可以自己玩这个生成器工具。

    【讨论】:

    • 仅供参考,喜欢 hjeke,其次,Details 类中有大约 100 个对象。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多