• 【C#】Newtonsoft.Json 常用方法总结


    1 实体类的 Json 序列化和反序列化

    我们以如下的 Person 类举例,其中包含了常用的数据类型:

    public class Person
    {
        public int ID { get; set; }
    
        public string Name { get; set; }
    
        public DateTime Birthday { get; set; }
    
        public bool IsVIP { get; set; }
        
        public float Account { get; set; }
    
        public string[] Favorites { get; set; }
        
        public string Remark { get; set; }
    }
    

    创建一个 Person 实例:

    Person person = new Person
    {
        ID = 1,
        Name = "张三",
        Birthday = DateTime.Parse("2000-01-02"),
        IsVIP = true,
        Account = 12.34f,
        Favorites = new string[] { "吃饭", "睡觉" }
    };
    

    1.1 Json 序列化

    返回不缩进的 Json 字符串

    JsonConvert.SerializeObject(person);
    
    {"ID":1,"Name":"张三","Birthday":"2000-01-02T00:00:00","IsVIP":true,"Account":12.34,"Favorites":["吃饭","睡觉"],"Remark":null}
    

    返回缩进的 Json 字符串

    JsonConvert.SerializeObject(person, Formatting.Indented);
    
    {
        "ID": 1,
        "Name": "张三",
        "Birthday": "2000-01-02T00:00:00",
        "IsVIP": true,
        "Account": 12.34,
        "Favorites": [
            "吃饭",
            "睡觉"
        ],
        "Remark": null
    }
    

    1.2 将不缩进的 JSON 字符串转成缩进形式

    private string JsonIndentation(string str)
    {
        //string str = JsonConvert.SerializeObject(entity);
        JsonSerializer serializer = new JsonSerializer();
        TextReader tr = new StringReader(str);
        JsonTextReader jtr = new JsonTextReader(tr);
        object obj = serializer.Deserialize(jtr);
        if (obj != null)
        {
            StringWriter textWriter = new StringWriter();
            JsonTextWriter jsonWriter = new JsonTextWriter(textWriter)
            {
                Formatting = Formatting.Indented,
                Indentation = 4,
                IndentChar = ' '
            };
            serializer.Serialize(jsonWriter, obj);
            return textWriter.ToString();
        }
        else
        {
            return str;
        }
    }
    

    或者:

    private string JsonIndentation(string json)
    {
        JObject obj = JObject.Parse(json);
        return obj.ToString();
    }
    

    1.3 其他设置

    JsonSerializerSettings settings = new JsonSerializerSettings();
    // 设置日期格式
    settings.DateFormatString = "yyyy-MM-dd";
    // 忽略空值
    settings.NullValueHandling = NullValueHandling.Ignore;
    // 缩进
    settings.Formatting = Formatting.Indented;
    
    JsonConvert.SerializeObject(person, settings);
    

    返回:

    {
      "ID": 1,
      "Name": "张三",
      "Birthday": "2000-01-02",
      "IsVIP": true,
      "Account": 12.34,
      "Favorites": [
        "吃饭",
        "睡觉"
      ]
    }
    

    1.4 Json 反序列化

    JsonConvert.DeserializeObject<Person>(json);
    

    2 JObject 使用

    2.1 创建对象

    JObject obj = new JObject();
    obj.Add("ID", 1);
    obj.Add("Name", "张三");
    obj.Add("Birthday", DateTime.Parse("2000-01-02"));
    obj.Add("IsVIP", true);
    obj.Add("Account", 12.34f);
    // 创建数组
    JArray array = new JArray();
    array.Add(new JValue("吃饭"));
    array.Add(new JValue("睡觉"));
    obj.Add("Favorites", array);
    obj.Add("Remark", null);
    

    2.2 JObject 中添加数组

    上例中的代码可以简化为:

    JArray array = new JArray("吃饭", "睡觉");
    

    2.3 从 Json 字符串创建 JObject

    string json = "{"ID":1,"Name":"张三","Birthday":"2000-01-02T00:00:00","IsVIP":true,"Account":12.34,"Favorites":["吃饭","睡觉"],"Remark":null}";
    
    JObject obj = JObject.Parse(json);
    

    2.4 从 Entity 创建 JObject

    JObject obj = JObject.FromObject(person);
    

    用匿名对象创建 JObject

    JObject obj = JObject.FromObject(new { name = "jack", age = 18 });
    
    //显示
    {
      "name": "jack",
      "age": 18
    }
    

    用初始化器

    JObject obj = new JObject()
    {
        { "name", "jack" },
        { "age", 18 }
    };
    

    2.5 获取值

    int id;
    if (obj["ID"] != null)
        id = obj["ID"].Value<int>();
    

    2.6 获取数组

    Newtonsoft.Json.Linq 不支持直接获取数组,但是可以获取 List,然后再转化为数组。

    string[] favorites;
    if (obj["Favorites"] != null)
        favorites = obj["Favorites"].Value<List<string>>().ToArray();
    
  • 相关阅读:
    图片处理帮助类
    网站前端的优化
    状态码大全
    服务端性能监控工具Nmon使用方法
    jmeter测试报告解析
    jmeter聚合报告
    jmeter跨线程组调用参数
    jmeter生成测试报告
    Jmeter获取cookie
    monkey的使用方法和常见命令
  • 原文地址:https://www.cnblogs.com/gl1573/p/11660202.html
Copyright © 2020-2023  润新知