C#解析JSON數據全攻略

還在為C#處理網絡API返回的復雜JSON數據頭疼嗎?據統計,90%的開發者都曾在JSON解析上栽過跟頭!

本文將手把手教你用C#輕松玩轉JSON數據:- HttpClient獲取網絡JSON數據- System.Text.Json動態解析技巧- 強類型模型轉換實戰- 特殊字符/日期格式處理方案- 完整可運行代碼示例

🔍 一、為什么JSON是C#開發必修課?

現代Web API中95%的數據交換采用JSON格式。無論是調用天氣API、支付接口,還是處理云服務返回數據,JSON解析都是核心技能!

?? 二、四步搞定網絡JSON數據

1. 獲取數據 - HttpClient最佳實踐

using var httpClient = new HttpClient();
var response = await httpClient.GetAsync("https://api.example.com/data");
var jsonString = await response.Content.ReadAsStringAsync();

關鍵點:使用using自動釋放資源,異步方法提升性能

2. 動態解析 - 快速讀取字段

using System.Text.Json;
var jsonDoc = JsonDocument.Parse(jsonString);
string name = jsonDoc.RootElement.GetProperty("user").GetProperty("name").GetString();

適用場景:快速提取少量字段,無需創建完整模型

3. 強類型解析 - 推薦方案!

public class User {public string Name { get; set; }public int Age { get; set; }public DateTime RegisterDate { get; set; }
}var user = JsonSerializer.Deserialize<User>(jsonString, new JsonSerializerOptions {PropertyNameCaseInsensitive = true // 忽略大小寫
});

優勢:編譯時檢查 + 智能提示 + 高可維護性

4. 特殊場景處理

- 日期格式轉換:

options.Converters.Add(new DateTimeConverter("yyyy-MM-dd"));

- 處理JSON注釋:

options.ReadCommentHandling = JsonCommentHandling.Skip;

🚨 三、避坑指南

-?NULL引用異常:給屬性設置默認值?public string Name { get; set; } = string.Empty;

-?字段缺失:使用[JsonIgnore]忽略不存在的屬性

-?性能陷阱:大文件解析用JsonDocument替代JObject

💻 四、完整代碼示例

using System.Text.Json;public async Task<WeatherData> GetWeatherAsync() {using var httpClient = new HttpClient();// 獲取杭州天氣數據var response = await httpClient.GetAsync("https://api.weather.com/v3?location=hangzhou");response.EnsureSuccessStatusCode();var json = await response.Content.ReadAsStringAsync();// 強類型解析return JsonSerializer.Deserialize<WeatherData>(json, new JsonSerializerOptions {PropertyNameCaseInsensitive = true,NumberHandling = JsonNumberHandling.AllowReadingFromString});
}// 定義數據模型
public class WeatherData {public string Location { get; set; } = string.Empty;public double Temperature { get; set; }public string Unit { get; set; } = "Celsius";[JsonPropertyName("wind_speed")]public double WindSpeed { get; set; }
}

文章轉載自:曲幽

原文鏈接:C#解析JSON數據全攻略 - 曲幽 - 博客園

體驗地址:JNPF快速開發平臺

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

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

相關文章

8-大語言模型—指令理解:基于 LoRA 的大語言模型指令微調框架

目錄 1、模型上下文窗口 1.1、增加上下文窗口的微調&#xff08;Fine-tuning for Longer Context&#xff09; 1.1.1、 核心目標 1.1.2、關鍵步驟 &#xff08;1&#xff09;數據準備&#xff1a;構建長文本訓練集 &#xff08;2&#xff09;微調策略&#xff1a;分階段適…

工業數據中臺:PLC、SCADA、MES 的實時協同架構

在智能制造升級過程中&#xff0c;工業數據的互聯互通是突破生產效率瓶頸的關鍵。PLC&#xff08;可編程邏輯控制器&#xff09;掌控著設備的實時運行參數&#xff0c;SCADA&#xff08;監控與數據采集系統&#xff09;負責車間級的狀態監控&#xff0c;MES&#xff08;制造執行…

【Golang】Go語言基礎語法

Go語言基礎語法 文章目錄Go語言基礎語法一、Go標記二、行分隔符三、注釋四、標識符五、字符串連接六、關鍵字七、Go語言的空格八、格式化字符串一、Go標記 Go程序可以由多個標記組成嗎&#xff0c;可以是關鍵字、標識符、常量、字符串、符號。如下Go語句由6個標記組成&#xf…

WebRTC指紋——深度分析(中篇)

1. 引言 在上篇中,我們建立了WebRTC審查規避系統分析的理論基礎,探討了技術背景和威脅模型。中篇將深入分析WebRTC協議棧中的具體識別特征,通過對多個主流WebRTC應用的實際協議分析,揭示不同實現之間存在的顯著差異。 這些協議層面的特征差異構成了審查系統進行指紋識別的…

谷粒商城篇章13--P340-P360--k8s/KubeSphere【高可用集群篇一】

1 k8s 1.1 簡介 Kubernetes 簡稱 k8s。 是用于自動部署&#xff0c; 擴展和管理容器化應用程序的開源系統。 中文官網&#xff1a; https://kubernetes.io/zh/ 中文社區&#xff1a; https://www.kubernetes.org.cn/ 官方文檔&#xff1a; https://kubernetes.io/zh/docs/h…

從零搭建 OpenCV 項目(新手向)-- 第二天 OpenCV圖像預處理(一)

目錄 一、圖像翻轉&#xff08;鏡像翻轉&#xff09; 1. 定義 2. OpenCV 函數 3. 數學表達 二、圖像仿射變換 1. 定義 2. 仿射變換的基本原理 3. OpenCV 函數 4. 圖像旋轉 5. 圖像平移 6. 圖像縮放 7. 圖像剪切 8. 為什么會出現黑色背景&#xff1f; 三、圖像色彩…

貪心算法Day6學習心得

第一道&#xff1a;738. 單調遞增的數字 - 力扣&#xff08;LeetCode&#xff09; 這道題目暴力算法肯定是最容易想到的&#xff0c;先附上暴力的代碼&#xff1a; class Solution { private:// 判斷一個數字的各位上是否是遞增bool checkNum(int num) {int max 10;while (n…

數據的評估與清洗篇---上手清理索引和列名

重命名索引和列名 在讀取數據時,如果我們發現數據的索引或者列名亂七八糟的,可以使用DataFrame的rename方法對它們進行重新命名。 df1.rename(index={...})df1.rename(columns={...}) 重命名索引 如果想改索引就把可選參數index指定為一個字典,針對索引,把要修改…

【ICML2025】時間序列|TimePro:炸裂!線性復雜度實現高效長程多元時間序列預測!

論文地址&#xff1a;https://arxiv.org/pdf/2505.20774 代碼地址&#xff1a;https://github.com/xwmaxwma/TimePro 為了更好地理解時間序列模型的理論與實現&#xff0c;推薦參考UP “ThePPP時間序列” 的教學視頻。該系列內容系統介紹了時間序列相關知識&#xff0c;并提供配…

2025真實面試試題分析-iOS客戶端開發

以下是對iOS客戶端開發工程師面試問題的分類整理、領域占比分析及高頻問題精選&#xff08;基于??85道問題&#xff0c;總出現次數118次??&#xff09;。按技術領域整合為??7大核心類別??&#xff0c;按占比排序并精選高頻問題標注優先級&#xff08;1-5&#x1f31f;&…

計算機網絡簡答題(大雪圣期末參考資料)

1、網絡性能指標/計算機網絡有哪些常用的性能指標&#xff1f;答&#xff1a;速率&#xff0c;帶寬&#xff0c;吞吐量&#xff0c;時延&#xff08;發送時延、傳播時延、處理時延、排隊時延&#xff09;&#xff0c;時延帶寬積&#xff0c;往返時間RTT和信道&#xff08;或網絡…

紅寶書單詞學習筆記 list 76-100

list 76NO.WordMeaning1staleadj. 不新鮮的&#xff1b;陳腐的2stalln. 小隔間&#xff1b;攤位&#xff1b;牲畜棚&#xff1b;v. 停頓&#xff1b;(使) 熄火&#xff1b;故意拖延3staplen. 訂書釘&#xff1b;主要產品&#xff1b;主要部分&#xff1b;主食&#xff1b;v. 用…

Vue3 學習教程,從入門到精通,Vue 3 計算屬性(Computed Properties)知識點詳解與案例代碼(15)

Vue 3 計算屬性&#xff08;Computed Properties&#xff09;知識點詳解與案例代碼 在 Vue 3 中&#xff0c;計算屬性&#xff08;Computed Properties&#xff09; 是用于基于響應式數據派生新數據的一種方式。計算屬性具有以下特點&#xff1a; 緩存性&#xff1a;只有在依賴…

2.5 PN-PTCP

Pro?net Precision Transparent Clock Protocol (PN-PTCP) PN-PTCP&#xff08;精確透明時鐘協議&#xff09;是一種專用于 Profinet 的 二層協議&#xff0c;其作用是為網絡中的設備提供高精度的時間同步。用于實現網絡設備的高精度時間同步。

WordPress與Typecho站點CloudFlare緩存優化實戰指南

文章目錄 WordPress與Typecho站點CloudFlare緩存加速全攻略 引言 一、CloudFlare緩存基礎原理 1.1 CloudFlare工作流程 1.2 緩存類型 二、基礎配置指南 2.1 CloudFlare賬戶設置 2.2 緩存配置 2.3 頁面規則設置 三、高級緩存策略 3.1 動態內容緩存 WordPress方案: Typecho方案:…

【OpenCV實現多圖像拼接】

文章目錄1 OpenCV 圖像拼接核心原理2 OpenCV 圖像拼接實現代碼方法一&#xff1a;使用 OpenCV 內置 Stitcher 類&#xff08;推薦&#xff09;方法二&#xff1a;手動實現核心步驟關鍵參數說明3 常見問題處理4 增量式圖像拼接&#xff08;Incremental Image Stitching&#xff…

haproxy 算法

一、靜態算法按照事先定義好的規則輪詢公平調度&#xff0c;不關心后端服務器的當前負載、連接數和響應速度 等&#xff0c;且無法實時修改權重(只能為0和1,不支持其它值)&#xff0c;只能靠重啟HAProxy生效。(不管后端死活&#xff09;1.1、static-rr&#xff1a;基于權重的輪…

Go 的第一類對象與閉包

1. Go 的第一類對象&#xff08;First-Class Citizens&#xff09; 什么是第一類對象&#xff1f; 第一類對象是指能夠像 普通值 一樣使用的對象&#xff0c;通常可以賦值給變量、傳遞給函數、作為函數返回值等。在很多編程語言中&#xff0c;函數本身不被視為第一類對象&#…

深度分析Android多線程編程

理解并正確運用多線程是構建高性能、流暢、響應迅速的 Android 應用的關鍵&#xff0c;但也充滿挑戰和陷阱。 核心挑戰&#xff1a;UI 線程&#xff08;主線程&#xff09;的限制 唯一性&#xff1a; Android 應用只有一個主線程&#xff0c;負責處理所有用戶交互&#xff08;觸…

uniapp在app中關于解決輸入框鍵盤彈出后遮住輸入框問題

問題描述&#xff1a; uniapp的app中&#xff0c;當表單頁面過長時&#xff0c;點擊下方的輸入框時&#xff0c;彈出鍵盤后會把輸入框給擋住&#xff0c;導致看不到輸入內容。 解決方案&#xff1a; 在page.json中&#xff0c;找到此頁面的配置&#xff0c;加上style中的softin…