使用原生 System.Text.Json 命名空間處理 JSON

栏目: ASP.NET · 发布时间: 7年前

内容简介:一直以來,當要處理 JSON 的時候目前Json.NET 最常被使用的功能莫過於

一直以來,當要處理 JSON 的時候 Json.NET 是最佳的幫手,有非常順手的 API 和功能,讓開發者輕鬆處理 JSON 的大小事,甚至在 .NET 的各種函示庫、框架中都有用到,但當許多專案相依於此函示庫時,只要版本一更新,很容易造成許多專案要更著變動,造成相依的函示庫版本很難掌握,因此 .NET Team 發展了 System.Text.Json 來在 .NET 專案中取代 Json.NET 的依賴。

目前 System.Text.Json 還在 Preview 版本,如果你是使用最新的 .NET Core 3,此函示庫已經包含在裡面了。當然你也可以自行透過 NuGet 來安裝 Preview 版本的 System.Text.Json 擴充套件來使用。

Json.NET 最常被使用的功能莫過於 JsonConvert.SerializeObject() 將物件序列化,以及 JsonConvert.DeserializeObject() 將 JSON 文字反序列化成物件,這兩個功能,我們就先來看看這兩個功能對應到 System.Text.Json 該如何使用。

System.Text.Json 底下有另一個專門在處理序列化的命名空間 System.Text.Json.serialization ,可以參考 官方文件 查看他所提供的 API 方法。

將物件序列化

假設我們有個 Student 類別如下:

class Student {
    public string Name { get; set; }
    public int Age { get; set; }
}

可以透過 JsonSerializer.ToString() 這個靜態方法將物件序列化成 JSON 文字,用法如下:

var student = new Student {
    Name = "Poy Chang",
    Age = 20
};
var json = JsonSerializer.ToString<Student>(student);

序列化的結果就會是像這樣:

{"Name":"Poy Chang","Age":20}

我們成功將物件序列化了,只是輸出的樣式稍微有一點不好看,如果能讓輸出結果排版一下,開發者在閱讀的時候,會比較好讀,這時可以加上 JsonSerializerOptions 設定,對輸出的結果做一些調整,透過設定 WriteIndented 屬性,可以將 JSON 文字加上縮排,作法如下:

var options = new JsonSerializerOptions
{
    WriteIndented = true
};
var json = JsonSerializer.ToString<Student>(student, options);

如此一來輸出的 JSON 就會被格式化,讓我們能輕鬆閱讀。

{
  "Name": "Poy Chang",
  "Age": 20
}

JsonSerializerOptions 還有其他屬性可以做調整,詳請查看 官方文件

將文字反序列化成物件

反過來,要將 JSON 文字轉換成物件也是經常遇到的情境,可以透過 JsonSerializer.Parse() 這個靜態方法將物件序列化成 JSON 文字,用法如下:

var json = "{\"Name\":\"Poy Chang\",\"Age\":20}";
var student = JsonSerializer.Parse<Student>(json);

使用起來是不是也非常簡單、順手。

JSON 屬性裝飾器

如果手動調整序列化後的屬性名稱,而不想更動 C# 原本的屬性名稱, System.Text.Json 有提供屬性裝飾器來讓開發者自行決定序列化後的結果,使用方式只要在屬性上面掛上裝飾器並設定要輸出的名稱即可,方法如下:

class Student {
    [JsonPropertyName("studentName")]
    public string Name { get; set; }
    [JsonPropertyName("studentAge")]
    public int Age { get; set; }
}

如此一來,透過 JsonSerializer.ToString() 序列化的結過就是變成

{
  "studentName": "Poy Chang",
  "studentAge": 20
}

後記

System.Text.Json 在處理 JSON 的速度以及記憶體的使用方面,都比 Json.NET 來的優秀,再加上 Json.NET 的作者 James Newton-King 也加入 Microsoft,未來這個套件勢必後勢看漲。同時 James 也表示,若是處理基本 JSON 轉換及查詢,使用 System.Text.Json 能獲得效能上的提升,但如果有特殊 JSON 處理的需求,Json.NET 仍然會持續開發、修正問題,依舊是一個不錯的解決方案。

參考資料:


以上所述就是小编给大家介绍的《使用原生 System.Text.Json 命名空間處理 JSON》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Rails 5敏捷开发

Rails 5敏捷开发

[美] Sam Ruby、[美] Dave Thomas、[美] David Heinemeier Hansson / 安道、叶炜、大疆Ruby技术团队 / 华中科技大学出版社 / 2017-12-30 / 115.00

本书以讲解“购书网站”案例为主线,逐步介绍Rails的内置功能。全书分为3部分,第一部分介绍Rails的安装、应用程序验证、Rails框架的体系结构,以及Ruby语言知识;第二部分用迭代方式构建应用程序,然后依据敏捷开发模式开展测试,最后用Capistrano完成部署;第三部分补充日常实用的开发知识。本书既有直观的示例,又有深入的分析,同时涵盖了Web开发各方面的知识,堪称一部内容全面而又深入浅出......一起来看看 《Rails 5敏捷开发》 这本书的介绍吧!

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具