zoukankan      html  css  js  c++  java
  • .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());
    }
  • 相关阅读:
    php CodeIgniter处理多环境错误级别配置
    bootstrap导航条在手机上默认展开二级目录,必须用setTimeout才能实现
    WordPress博客网站fonts.useso加载慢解决办法
    JS实现复制网页内容自动加入版权内容代码和原文链接
    bootstrap实现 手机端滑动效果,滑动到下一页,jgestures.js插件
    mysql字段varchar区分大小写utf8_bin、utf8_general_ci编码区别
    js捕捉IE窗口失去焦点事件,判断离开页面刷新或关闭的方法
    php防盗链,php ci在control里面控制除了自己站内的链接点击跳转,其他来源的都跳到站内页面
    php原子操作,文件锁flock,数据库事务
    默认只显示指定高度,出来按钮 阅读更多,加载全文,点击后显示全文的实现方式
  • 原文地址:https://www.cnblogs.com/gygtech/p/14806772.html
Copyright © 2011-2022 走看看