JSON 序列化与反序列化
JSON序列化与反序列化
JSON是什么
JSON是一种轻量级的数据交互格式,简单来说就是键值对形式的字符串,{"name":"admin","age":18}
示例如下:
{
"userName": "admin",
"age": 17,
"gender": true,
"books": [{
"title": "厚黑学",
"date": "1970 年1月1日",
"author": null
}, {
"title": "厚黑学",
"date": "1970 年1月1日",
"author": "张三"
}]
}
Newtonsoft.Json
.NET最常用的JSON序列化器,JSON序列化必备,官网:https://www.newtonsoft.com/json
对象的序列化与反序列化
将字符串转化成对象
//JSON JSON字符串
string str = "{\"userName\":\"admin\",\"age\":17,\"gender\":true,\"books\":[{\"title\":\"厚黑学\",\"date\":\"1970 年1月1日\",\"author\":null},{\"title\":\"厚黑学\",\"date\":\"1970 年1月1日\",\"author\":\"张三\"}]}";
Person p =JsonConvert.DeserializeObject<Person>(str);
foreach (var item in p.books)
{
Console.WriteLine($"书名:{item.title},作者:{item.author}");
}
将对象转化成JSON
p.Name = "王二小";
string tmo = JsonConvert.SerializeObject(p);
序列化与反序列化忽略某些属性
- 忽略类内所有属性
[JsonObject(MemberSerialization.OptIn)]
用于在序列化与反序列化时忽略一个类里所有的属性,只有当在类内属性上打特性标签[JsonProperty]
时才支持序列化与反序列化。
[JsonObject(MemberSerialization.OptIn)]
public class Person
{
/// <summary>
/// admin
/// </summary>
[JsonProperty]
public string Name { get; set; }
/// <summary>
/// Age
/// </summary>
public int age { get; set; }
private int money { get; set; }
/// <summary>
/// Gender
/// </summary>
///
public bool gender { get; set; }
public List<Books> books { get; set; }
}
- 序列化所有属性(默认)
默认实体类上默认打着[JsonObject(MemberSerialization.OptOut)]特性标签(可以省略不写),如果要忽略某些属性,要在属性上打[JsonIgnore]。
[JsonObject(MemberSerialization.OptOut)]
public class Person
{
/// <summary>
/// admin
/// </summary>
[JsonIgnore]
public string Name { get; set; }
/// <summary>
/// Age
/// </summary>
public int age { get; set; }
private int money { get; set; }
/// <summary>
/// Gender
/// </summary>
///
public bool gender { get; set; }
public List<Books> books { get; set; }
}
- 动态控制实体类属性的是否忽略序列化(默认)
当某些条件下需要序列化A属性和B属性,某些情况下需要忽略A属性与B属性,我们该怎么做?
答:使用JsonSerializerSettings设置某实体类对象要忽略序列化的属性(配合if与else控制属性的动态忽略)。
JsonSerializerSettings jsetting=new JsonSerializerSettings();
jsetting.ContractResolver = new LimitPropsContractResolver(new string[] { "Age", "IsMarry" });
Console.WriteLine(JsonConvert.SerializeObject(p, Formatting.Indented, jsetting));
好文推荐
https://www.lagou.com/lgeduarticle/54110.html 这篇文章详细讲解了一些Json.NET常用方法,言简意赅。
登峰造极的成就源于自律