C# _Json數據

目錄

1、添加Json庫

2、數據序列化(對象轉 JSON)和反序列化(JSON 轉對象)操作

3、序列化 創建和讀取Json數據?

創建Json數據? 定義一個CreateJson方法

讀取 解析 Json數據? 定義一個ReadJson方法

4、程序運行結果


在 C# 中,JSON(JavaScript Object Notation)是一種輕量級的數據交換格式,常用于數據序列化(對象轉 JSON)和反序列化(JSON 轉對象)操作。

特點類別具體說明
數據格式鍵值對、數組、字符串、數字、布爾值和 null 組成,結構簡潔易讀,便于解析
核心功能序列化:將 C# 對象轉換為 JSON 字符串(便于存儲 / 傳輸)
反序列化:將 JSON 字符串轉換為 C# 對象(便于程序處理)
主流處理庫System.Text.Json:.NET 內置官方庫,性能優異,支持多數基礎和中等復雜度場景
Newtonsoft.Json(Json.NET):第三方庫,功能豐富,兼容性強,適合復雜場景(如自定義轉換)
類型映射需保證 C# 類屬性與 JSON 字段在名稱、類型上匹配,支持自定義映射配置
結構支持可處理嵌套對象、多層數組等復雜 JSON 結構,滿足多樣化數據表示需求
可配置性支持自定義序列化選項(如日期格式、大小寫轉換、忽略空值等)

1、添加Json庫

點擊VS中的解決方案資源管理器,右鍵項目,選中項目中的管理NuGet程序包

點擊瀏覽,搜索Json,下載下圖這個最新版本的Newtonsoft.Json

點擊應用

點擊已安裝查看,安裝成功

這個Json庫的官網手冊鏈接:Json.NEThttps://www.newtonsoft.com/json/help/html/Introduction.htm#!

2、數據序列化(對象轉 JSON)和反序列化(JSON 轉對象)操作

首先創建一個Student類

 internal class Student{public string Name { get; set; }public int Id { get; set; }public bool Sex { get; set; }public string Address { get; set; }public Student(string name, int id, bool sex, string address){Name = name;Id = id;Sex = sex;Address = address;}}

創建一個Student類的對象stu1,將對象序列化為Json對象?并將對象中的數據 轉化為Json數據儲存在字符串ObjJson 中。

JsonConvert.SerializeObject?是第三方庫?Newtonsoft.Json(Json.NET)?提供的核心方法,用于將 C# 對象序列化為 JSON 字符串。

Student stu1 = new Student("李四", 000000, true, "河南省鄭州市高新區");
//將對象 序列化為Json對象  將對象中的數據 轉化為Json數據
string ObjJson = JsonConvert.SerializeObject(stu1);

解析對象 反序列化 ?就是將Json數據 轉回為原有類型

JsonConvert.DeserializeObject?是 Newtonsoft.Json(Json.NET)庫中用于將 JSON 字符串反序列化為 C# 對象

Student stu = JsonConvert.DeserializeObject<Student>(ObjJson);
//打印解析出的數據
Console.WriteLine(stu);
Console.WriteLine(stu.Name);
Console.WriteLine(stu.Id);
Console.WriteLine(stu.Sex);
Console.WriteLine(stu.Address);

?將對象的數據存儲在文件中

?將stu對象的數據 轉化為字符串str1存在文件Json數據1.txt中

 string path1 = Directory.GetCurrentDirectory() + "\\Json數據1.txt";string str1 = stu.ToString();using (StreamWriter sw = new StreamWriter(path1, false)){sw.WriteLine(stu);}

3、序列化 創建和讀取Json數據?

主函數

//路徑默認運行文件夾   \bin\Debug\net8.0
string path = Directory.GetCurrentDirectory() + "\\Json數據.txt";
//序列化 創建Json數據
CreateJson(path);
//讀取Json數據
ReadJson(path);

創建Json數據? 定義一個CreateJson方法

public static void CreateJson(string path)
{//創建一個Json對象JObject J = new JObject();// 添加數據{ "name":"張三",  "id" : 123456 ,"sex":"男" ,"Color" : ["red","blue","yellow"]}//第一種向Json對象中添加數據的方式  索引器J["name"] = "張三";J["id"] = 123456;// 第二種添加數據的方式 AddJ.Add("sex", "男");//第三種 創建一個Json數組 使用Add添加JArray Ja = new JArray();Ja.Add("red");Ja.Add("blue");Ja.Add("yellow");J.Add("Color", Ja);//鍵為Color  值為Ja Json數組

其中,JArray?是 Newtonsoft.Json(Json.NET)庫中用于處理 JSON 數組的核心類,繼承自?JContainer,實現了?IEnumerable<JToken>?接口。它允許開發者在不預先定義實體類的情況下,靈活地創建、解析、修改和查詢 JSON 數組,是處理動態或未知結構 JSON 數據的重要工具。

將Json對象的數據 轉化為字符串寫入? Json數據.txt 文件中

    //將Json對象的數據 轉化為字符串string str = J.ToString();using (StreamWriter sw = new StreamWriter(path, false)){sw.WriteLine(str);}
}

讀取 解析 Json數據? 定義一個ReadJson方法

public static void ReadJson(string path)
{string strjson;// 讀取Json數據的文件using (StreamReader sr = new StreamReader(path)){//ReadToEnd 一次性讀取流或文本中的所有剩余內容,并以字符串形式返回。strjson = sr.ReadToEnd();}//將Json數據格式的字符串 轉化為Json對象JObject J = JObject.Parse(strjson);

?提取數據

????????解析出來之后 使用的話就接收 ?如果只是看一下數據 直接打印即可

    //引用鍵,將值轉換為字符串打印string name = J["name"].ToString();Console.WriteLine(name);Console.WriteLine(J["id"]);Console.WriteLine(J["sex"]);Console.WriteLine(J["Color"]);//正確讀取鍵Color中的值 Json數組的內容foreach (var item in J["Color"]){Console.WriteLine(item);}//創建一個數組接收鍵Color的值,鍵Color的值是一個數組,這里就相當于數組里面套數組JArray ja = new JArray(J["Color"]);//[["red","blue","yellow"]]  形成了多維數組了//這里遍歷只有一個內容 ["red","blue","yellow"]foreach (var item in ja){Console.WriteLine(item);}
}

程序運行結果

寫入成功:

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/91778.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/91778.shtml
英文地址,請注明出處:http://en.pswp.cn/web/91778.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JavaScript 原始值與引用值

JavaScript 原始值與引用值 ECMAScript變量可以包含兩種不同類型的數據&#xff1a;原始值和引用值。 原始值&#xff08;primitive value&#xff09;就是最簡單的數據&#xff0c;引用值&#xff08;reference value&#xff09;則是由多個值構成的對象。 保存原始值的變量是…

linux中掛載磁盤和卸載

查找磁盤 找到你想要掛載的磁盤。可以使用lsblk或fdisk -l命令來查看系統中所有的磁盤和分區信息。 lsblk 對數據盤進行分區 在fdisk交互界面里&#xff0c;按以下步驟操作 fdisk /dev/vdb- 輸入n來創建新分區。 - 按照提示設置分區的起始扇區、結束扇區等信息&#xff0c;…

java8學習筆記-Stream流

JDK1.8新增了Stream類&#xff0c;從而把函數式編程的風格引入到Java語言中&#xff0c;Stream類的API提供了強大的功能&#xff0c;使用Stream后&#xff0c;可以寫出更加強大&#xff0c;更加簡潔的代碼首先&#xff0c;Stream流有一些特性&#xff1a;Stream流不是一種數據結…

Flutter開發 dart語言基本語法

特點 Dart語言支持JIT與AOT。 Dart語言采用單線程模型。 Dart語言是強類型編程語言&#xff0c;但是允許弱類型語言式編程。 基本語法 1.變量和常量 變量 var、object、dynamic關鍵字或數據類型顯式聲明變量。 命名規則&#xff1a; 變量名稱必須由數字、字母、下劃線或$組成&a…

SpringBoot:基于 Redis 自定義注解實現后端接口防重復提交校驗(冪等操作)

SpringBoot&#xff1a;基于 Redis 自定義注解實現后端接口防重復提交校驗&#xff08;冪等操作&#xff09;可基于 時間間隔 和 用于冪等判斷的參數名稱 實現防重復提交校驗 客戶端發送請求 ↓ [Spring Boot 應用入口]↓ ┌─────────────────────────…

【語音技術】意圖與語料

目錄 1. 意圖 1.1. 意圖分類 1.1.1 入口意圖&#xff08;Entry Intent&#xff09; 1.1.2 對話意圖&#xff08;Dialog Intent&#xff09; 1.2. 意圖類型切換操作步驟 2. 語料 2.1 語料分類詳解 2.2 語料編寫規范詳解 2.3 標簽符號深度說明 3. 詞槽 3.1 符類型要求 …

【MySQL集群架構與實踐5】使用Docker實現水平分片

目錄 一. 在Docker中安裝ShardingSphere 二. 實踐&#xff1a;水平分片 2.1 應用場景 2.2 架構圖 2.3 服務器規劃 2.4 創建server-user容器 2.5 創建server-order0和server-order1容器 2.6.日志配置 2.7 數據節點配置 2.8.測試數據節點 2.8.1.測試server_order0.t_or…

視覺圖像處理中級篇 [1]—— 彩色照相機的效果與預處理

在工業檢測中&#xff0c;黑白相機雖應用廣泛&#xff0c;但在應對顏色差異檢測時往往力不從心。彩色照相機憑借其對色彩信息的精準捕捉&#xff0c;成為復雜場景下的理想選擇&#xff0c;而預處理技術則進一步釋放了其性能潛力。一、彩色照相機的效果檢查蓋子上的金色標簽可以…

使用 BERT 的 NSP 實現語義感知切片 —— 提升 RAG 系統的檢索質量

在構建 Retrieval-Augmented Generation&#xff08;RAG&#xff09;系統時&#xff0c;文檔的切片方式至關重要。我們需要將長文本切分成合適的段落&#xff08;chunks&#xff09;&#xff0c;然后存入向量數據庫進行召回。如果切得太粗&#xff0c;會丟失上下文細節&#xf…

使用STM32CubeMX生成的STM32CubeIDE工程在更改工程名后編譯失敗問題解決

0 問題描述 使用STM32CubeMX生成STM32CubeIDE工程,然后使用STM32CubeIDE改名后編譯提示如下錯誤: 1 問題原因及解決辦法 1.1 問題原因 原因在于更名后STM32CubeIDE沒有自動更新引用關系,這是因為我們使用STM32CubeMX生成代碼時沒有勾選在根目錄下生成: 取消勾選在根目…

8月3日星期日今日早報簡報微語報早讀

8月3日星期日&#xff0c;農歷閏六月初十&#xff0c;早報#微語早讀。1、廣西防城港&#xff1a;奔馳女司機身份已查清&#xff0c;結果將統一對外發布&#xff1b;2、陳藝文、陳佳包攬游泳世錦賽女子跳水三米板金銀牌&#xff1b;3、九省份保險業已賠付暴雨災害損失5.2億元&am…

wxPython 實踐(六)對話框

wxPython 實踐&#xff08;一&#xff09;概述 wxPython 實踐&#xff08;二&#xff09;基礎控件 wxPython 實踐&#xff08;三&#xff09;頁面布局 wxPython 實踐&#xff08;四&#xff09;事件響應 wxPython 實踐&#xff08;五&#xff09;高級控件 wxPython 實踐&#x…

MATLAB科研數據可視化技術

互聯網的飛速發展伴隨著海量信息的產生&#xff0c;而海量信息的背后對應的則是海量數據。如何從這些海量數據中獲取有價值的信息來供人們學習和工作使用&#xff0c;這就不得不用到大數據挖掘和分析技術。數據可視化分析作為大數據技術的核心一環&#xff0c;其重要性不言而喻…

文明存續的時間博弈:論地球資源枯竭臨界期的技術突圍與行動緊迫性

摘要當地球資源消耗以指數級速度逼近生態承載力極限&#xff0c;人類文明正面臨“存續還是消亡”的終極抉擇。本文基于地球資源枯竭的實證數據與技術突破的可行性分析&#xff0c;揭示文明存續的時間窗口已進入不可逆臨界期&#xff08;2040-2070年&#xff09;&#xff0c;論證…

Elasticsearch 8.19.0 和 9.1.0 中 LogsDB 和 TSDS 的性能與存儲改進

作者&#xff1a;來自 Elastic Martijn Van Groningen 探索 TSDS 和 LogsDB 的最新增強功能&#xff0c;包括優化 I/O、提升合并性能等。 Elasticsearch 帶來了許多新功能&#xff0c;幫助你為你的使用場景構建最佳搜索解決方案。通過我們的示例筆記本深入學習&#xff0c;開始…

cs336之注意pytorch的tensor在哪里?(assert的使用)

問題 記住&#xff1a;無論何時你在pytorch中有一個張量tensor&#xff0c;你應該始終問一個問題&#xff1a;它當前位于哪里&#xff1f; 注意它在CPU還是在GPU中。要判斷它在哪里&#xff0c;可以使用python的assert斷言語句。 assert斷言 在 Python 中&#xff0c;assert 是…

Mysql 分區表

分區表是將一張表分成多張獨立子表&#xff0c;每個子表是一個區&#xff0c;目的是提高查詢效率。 從 server 層來看&#xff0c;只有一張表。但是從引擎層來看&#xff0c;是多張表&#xff0c;對應多個.idb文件。引擎層訪問數據只訪問特定分區表&#xff0c;也只對特定分區表…

Makefile 入門與實踐指南

Makefile 是用于 make 工具的配置文件&#xff0c;它定義了如何編譯和鏈接你的項目&#xff0c;讓構建過程自動化。一、核心概念 make 的核心思想是 “目標”&#xff08;Target&#xff09; 和 “依賴”&#xff08;Dependencies&#xff09;&#xff1a; 目標 (Target)&#…

分布式微服務--Nacos作為配置中心(補)關于bosststrap.yml與@RefreshScope

一、關于bosststrap.yml? bootstrap.yml 和 application.yml 的區別對比項bootstrap.ymlapplication.yml加載時機優先于 application.yml 加載&#xff08;啟動早期&#xff09;程序初始化完成后加載主要用途設置應用的外部配置源、注冊中心信息等設置應用內部配置&#xff0c…

[Qt]QString 與Sqlite3 字符串互動[漢字不亂碼]

環境&#xff1a;Qt C&#xff08;msvc c&#xff09;1.將與數據庫交互的代碼文件編碼轉換為utf-8-bom編碼&#xff0c;&#xff08;可使用notepad 進行轉換&#xff09;2.在代碼文件頭文件中加上下面代碼。//vs2010 版本是 1600 #if defined(_MSC_VER) && (_MSC_VER &…