• .net 5.0


    Newtonsoft.Json
    NuGet直接引用

     Newtonsoft.Json

    NuGet中间件引用:使用方法请参考其他文章

     Microsoft.AspNetCore.Mvc.NewtonsoftJson

    常用方法:反序列化/序列化
    JsonConvert.DeserializeObject<T>(string json)//反序列化
    JsonConvert.SerializeObject(object obj) //序列化
    高级特性1:某些字段不想被反序列化
    public class Person
    {
        public int Age { get; set; }
    
        public string Name { get; set; }
    
        [JsonIgnore]
        public string Sex { get; set; }
    }
    高级特性2:自定义序列化名称
    public class Person
    {
        public int Age { get; set; }
    
        public string Name { get; set; }
    
        [JsonProperty(PropertyName = "SepcialSex")]
        public string Sex { get; set; }
    }
    Json字符串 转 【JObject / JArray】  
    用例准备
    //构建一个json对象,描述了一个老师的实体,里面包含老师的基本属性(名称、年龄),所管理的班级属性,所管理的班级的学生数组
    dynamic teacher = new 
    { 
        name = "张三", 
        age = 51, 
        classRoom = new 
        { 
            name = "1年级1班", 
            desc = "描述" 
        }, 
        students = new[] 
        { 
            new { name = "小明" }, 
            new { name = "小红" } 
        } 
    };
    //序列化
    string jsonStr = JsonConvert.SerializeObject(teacher);
    JObject:获取值得方式 .Value<>() / ToString()
    jsonStr = "{"name":null,"age":null,"classroom":{"name":"1年级1班","desc":"描述"},"students":[{"name":"小名"},{"name":"小红"}]}";
    
    JObject jTeacher = JObject.Parse(jsonStr);
    //获取一级数据 .Value<T>方式 / ToString() 方式
    string teacherName = jTeacher["name"].Value<string>();//区分大小写,没有会报异常
    string teacherGender = jTeacher["gender"].ToString();//区分大小写,没有会报异常
    int? teacherAge = jTeacher["age"].Value<int?>();//数字如果是null,而接收类型不是可空类型,则会报异常
    JObject:获取二级
    string className = jTeacher["classRoom"]["name"].Value<string>();
    判断key是否存在:单层判断
    if (jTeacher.Property("name") != null)
    {
        Console.WriteLine("有");
    }
    获取JArray:如果需要判断里面的值是否存在,则需要转为JObject类型
    //jTeacher["students"].Value<string>();//这个是错误的,数组无法转为string
    JArray students = JArray.Parse(jTeacher["students"].ToString());//null或者""都会报错
    foreach (var item in students)
    {
        string studentName = item["name"].Value<string>();
    }
    遍历 JObject 对象
    foreach (JProperty item in obj.Children())
    {
        Console.WriteLine("Name=" + item.Name + "-Value=" + item.Value);
    }
    JObject / JArray   创建json字符串
    创建对象
    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);
    
    JArray array1 = new JArray("吃饭", "睡觉");
     C#给JSON对象添加一个键值对:方式1
    /// <summary>添加一个属性
    /// C#给JSON对象添加一个键值对
    /// </summary>
    /// <param name="obj">待添加属性的对象</param>
    /// <param name="key">键名</param>
    /// <param name="value">值</param>
    /// <returns>添加属性后的对象</returns>
    public static object Add(object obj, string key, object value)
    {
        JObject jObj = JObject.Parse(JsonConvert.SerializeObject(obj));
        jObj.Add(new JProperty(key, value));
        return JsonConvert.DeserializeObject(jObj.ToString());
    }
     C#给JSON字符串添加一个键值对:方式2
    /// <summary>添加一个属性
    /// C#给JSON字符串添加一个键值对
    /// </summary>
    /// <param name="obj">待添加属性的对象</param>
    /// <param name="key">键名</param>
    /// <param name="value">值</param>
    /// <returns>添加属性后的对象</returns>
    public static object AddStr(string obj, string key, object value)
    {
        JObject jObj = JObject.Parse(obj);
        jObj.Add(new JProperty(key, value));
        return JsonConvert.DeserializeObject(jObj.ToString());
    }
  • 相关阅读:
    位运算
    方法重载
    基本数据类型与引用数据类型参数
    带返回值方法的定义格式
    return使用
    方法的通用格式
    方法定义的格式
    google chrome developer tools
    Skolelinux
    ajax
  • 原文地址:https://www.cnblogs.com/gygtech/p/14806772.html
Copyright © 2020-2023  润新知