国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Json.net的高級用法

在前后端使用Json進行數(shù)據(jù)交互的時候,很多情況下我們定義的實體類與前端所需要的Json格式的字段或者值并不能保持一致,所以我們需要在盡量改動小的情況下以滿足以上場景;

所以這篇寫一下關于Json.net的一些小操作。

我們有以下實體類

private class Studet{    public string name { get; set; }    public int age { get; set; }    public string idCard { get; set; }    public DateTime birthday { get; set; }    public List<hobby> hobbys { get; set; }}private class hobby{    public int sort { get; set; }    public string desc { get; set; }}
//初始化賦值Studet student = new Studet();student.name = "張三";student.age = 20;student.idCard = "1234567890";student.birthday = new DateTime(2021, 1, 1);List<hobby> list = new List<hobby>();list.Add(new hobby { desc = "寫字", sort = 1 });list.Add(new hobby { desc = "游泳", sort = 2 });student.hobbys = list;

 如果直接序列化成Json的話,是如下數(shù)據(jù)

//Newtonsoft.Json.Formatting.Indented這個輸出的json數(shù)據(jù)是格式化之后的string json = JsonConvert.SerializeObject(student, Newtonsoft.Json.Formatting.Indented);Console.WriteLine(json);//輸出{  "name": "張三",  "age": 20,  "idCard": "1234567890",  "birthday": "2021-01-01T00:00:00",  "hobbys": [    {      "sort": 1,      "desc": "寫字"    },    {      "sort": 2,      "desc": "游泳"    }  ]}

顯而易見,我們遇到了第一個問題,birthday時間格式,輸出出來的并不是我們常用的格式,在不對類進行改變的情況下,我們可以使用下面的方式對時間數(shù)據(jù)進行格式化

//DateTimeFormat可以直接寫要生成的時間格式IsoDateTimeConverter timeFormat = new IsoDateTimeConverter { DateTimeFormat = "yyyy-MM-dd" };string json = JsonConvert.SerializeObject(student, Newtonsoft.Json.Formatting.Indented, timeFormat);

再介紹下修飾類的兩個特性:

//該類所有成員都不會被序列化,添加了JsonProperty特性的可以[JsonObject(MemberSerialization.OptIn)]private class Studet{}
//該類所有公有成員會被序列化[JsonObject(MemberSerialization.OptOut)]private class Studet{}

介紹一下用法:假如我們的Studet類添加了OptIn特性,則使用序列化的時候,是沒有任何數(shù)據(jù)的,但如果對字段也添加了JsonProperty特性,則有此特性的是可以被序列化的;

如我們上面的類只想輸出name和age的話

[JsonObject(MemberSerialization.OptIn)]private class Studet{    [JsonProperty]    public string name { get; set; }    [JsonProperty]    public int age { get; set; }    public string idCard { get; set; }    public DateTime birthday { get; set; }    public List<hobby> hobbys { get; set; }}string json = JsonConvert.SerializeObject(student, Newtonsoft.Json.Formatting.Indented);//輸出{"name":"張三","age":20}

如果我們除了idcard都要輸出的話

[JsonObject(MemberSerialization.OptOut)]//也可不寫,默認此模式private class Studet{    public string name { get; set; }    public int age { get; set; }    [JsonIgnore]    public string idCard { get; set; }    public DateTime birthday { get; set; }    public List<hobby> hobbys { get; set; }}string json = JsonConvert.SerializeObject(student, Newtonsoft.Json.Formatting.Indented);//輸出{"name":"張三","age":20,"birthday":"2021-01-01","hobbys":[{"sort":1,"desc":"寫字"},{"sort":2,"desc":"游泳"}]}

還可以自定義輸出的字段名稱

//加上此特性后,輸出的值為Name:張三[JsonProperty(PropertyName = "Name")]public string name { get; set; }

除此之外,我們還可以忽略值為Null的數(shù)據(jù)

//若name值為Null,則不會輸出JsonSerializerSettings jsetting = new JsonSerializerSettings();jsetting.NullValueHandling = NullValueHandling.Ignore;string json = JsonConvert.SerializeObject(student, jsetting);
//也可以針對單個字段值為Null做處理[JsonProperty(NullValueHandling=NullValueHandling.Ignore)]public string name { get; set; }

End...

若上一篇和以上內容仍然未滿足某些開發(fā)需求,建議可以去看看Newtonsoft.Json的源碼,會帶來很多驚喜的特性以及使用方式。

由簡入繁,拿來即用

后續(xù)精彩,持續(xù)關注

本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
SpringMVC: @ResponseBody后臺解析JSON返回前端時大寫字母變小寫的問題
mybatis自定義typeHandler映射對象為JSON
C#封裝百度Web服務API處理包含(Geocoding API,坐標轉換API)
jackson之TypeReference復雜泛型和首字母大寫的json轉換
Newtonsoft.Json高級用法
SpringBoot序列化與反序列化
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服