相关文章推荐
仗义的大象  ·  ubuntu 界面开发-掘金·  3 年前    · 
温暖的桔子  ·  KeyNotFoundException: ...·  3 年前    · 

Newtonsoft.Json

NuGet直接引用

Newtonsoft.Json

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

Microsoft.AspNetCore.Mvc.NewtonsoftJson

常用方法:反序列化/序列化

JsonConvert.DeserializeObject(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方式 / ToString() 方式
string teacherName = jTeacher["name"].Value();//区分大小写,没有会报异常
string teacherGender = jTeacher["gender"].ToString();//区分大小写,没有会报异常
int? teacherAge = jTeacher["age"].Value();//数字如果是null,而接收类型不是可空类型,则会报异常

JObject:获取二级

string className = jTeacher["classRoom"]["name"].Value();

判断key是否存在:单层判断

if (jTeacher.Property("name") != null)
    Console.WriteLine("有");
}

获取JArray:如果需要判断里面的值是否存在,则需要转为JObject类型

//jTeacher["students"].Value();//这个是错误的,数组无法转为string
JArray students = JArray.Parse(jTeacher["students"].ToString());//null或者""都会报错
foreach (var item in students)
    string studentName = item["name"].Value();
}

遍历 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

///添加一个属性
/// C#给JSON对象添加一个键值对
//////待添加属性的对象///键名///值///添加属性后的对象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

///添加一个属性
/// C#给JSON字符串添加一个键值对
//////待添加属性的对象///键名///值///添加属性后的对象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());