【问题标题】:Deserializing JSON as a Generic List将 JSON 反序列化为通用列表
【发布时间】:2011-09-21 18:46:30
【问题描述】:

我有一个过滤器字符串,格式如下:

{"groupOp":"AND","rules":[{"field":"FName","op":"bw","data":"te"}]}

我需要将其反序列化为通用项目列表。

谁能指导我如何做到这一点?

【问题讨论】:

  • 是的,我创建了一个类并尝试使用以下代码进行反序列化。IList filterData = new JavaScriptSerializer().Deserialize>(filter);
  • 您是否编写了 DataContract 来存储反序列化的数据?
  • public class FilterClass { public string groupOp { get;放; } 公共字符串字段 { 获取;放; } 公共字符串操作 { 获取;放; } 公共字符串数据 { 获取;放; } }

标签: javascript asp.net


【解决方案1】:

看看JSON.NET。它允许您执行以下操作:

JObject o = new JObject(
  new JProperty("Name", "John Smith"),
  new JProperty("BirthDate", new DateTime(1983, 3, 20))
  );

JsonSerializer serializer = new JsonSerializer();
Person p = (Person)serializer.Deserialize(new JTokenReader(o), typeof(Person));

Console.WriteLine(p.Name);
// John Smith

来源:the documentation

【讨论】:

    【解决方案2】:

    尝试像这样使用JavaScriptSerializer 类:

    反序列化代码

    using System.Web.Script.Serialization;
    
    ...
    
    string json = "{\"groupOp\":\"AND\",\"rules\":[{\"field\":\"FName\",\"op\":\"bw\",\"data\":\"te\"}]}";
    JavaScriptSerializer serializer = new JavaScriptSerializer();
    Filter filter = (Filter)serializer.Deserialize<Filter>(json);
    

    public class Filter
    {
        public string GroupOp { get; set; }
        public List<Rule> Rules { get; set; }
    
        public Filter()
        {
            Rules = new List<Rule>();
        }
    }
    
    public class Rule
    {
        public string Field { get; set; }
        public string Op { get; set; }
        public string Data { get; set; }
    }
    

    【讨论】:

    • 我不会认为这是一个“通用”列表。在这里您必须定义类,因此如果 JSON 要更改格式,则必须有人对类进行更新。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多