iT邦幫忙

2025 iThome 鐵人賽

DAY 13
0

昨天我們學了如何用 HttpClient 呼叫 Web API。
通常 API 回傳的資料會是 JSON 格式,我們今天就要學:

  1. JSON 格式是什麼
  2. 如何用 System.Text.Json 解析
  3. NuGet 套件的簡介(方便引用外部功能庫)
  4. 實戰:把 API 回傳轉換成 StockProfile

JSON 格式簡介

JSON(JavaScript Object Notation)是一種輕量化的資料交換格式。
它的結構很像 C# 的物件:

  • 物件 (Object):用 {} 包起來,包含 key-value 配對
  • 陣列 (Array):用 [] 包起來,存放多筆資料

範例:

{
  "Code": "2330",
  "Name": "台積電",
  "Industry": "半導體",
  "Market": "TSE"
}

多筆股票資料則會是:

[
  { "Code": "2330", "Name": "台積電", "Industry": "半導體" },
  { "Code": "2303", "Name": "聯電", "Industry": "半導體" }
]

System.Text.Json 基礎

在 .NET 內建就有 System.Text.Json 命名空間,可以做 序列化 (Serialize)反序列化 (Deserialize)

序列化:物件 → JSON

using System.Text.Json;

var stock = new { Code = "2330", Name = "台積電" };
string json = JsonSerializer.Serialize(stock);
Console.WriteLine(json);
// {"Code":"2330","Name":"台積電"}

反序列化:JSON → 物件

using System.Text.Json;

string json = @"{""Code"":""2330"",""Name"":""台積電""}";
var stock = JsonSerializer.Deserialize<StockProfile>(json);

Console.WriteLine($"{stock.Code} - {stock.Name}");

介紹 NuGet

NuGet 是 .NET 的套件管理工具,可以快速下載與安裝外部程式庫。

  • 在 Visual Studio:右鍵專案 → Manage NuGet Packages

  • 在 CLI:

    dotnet add package System.Text.Json
    

    (雖然 System.Text.Json 已經內建,但有些專案可能需要更新版本)

NuGet 讓我們不需要自己造輪子,直接用別人已經寫好的功能。


實戰:將 API 回傳轉換成 StockProfile

假設我們呼叫了一個 API,回傳內容如下:

[
  { "Code": "2330", "Name": "台積電", "Industry": "半導體" },
  { "Code": "2881", "Name": "富邦金", "Industry": "金融" }
]

解析程式碼

using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Text.Json;
using System.Threading.Tasks;
using TwStockMaster.Utils.Models; // 這裡放 StockProfile 的命名空間

class Program
{
    static async Task Main(string[] args)
    {
        HttpClient client = new HttpClient();

        // 假設 API URL
        string url = "https://example.com/api/stocks";
        string json = await client.GetStringAsync(url);

        // 反序列化成 List<StockProfile>
        var options = new JsonSerializerOptions
        {
            PropertyNameCaseInsensitive = true // 忽略大小寫
        };

        List<StockProfile>? stocks = JsonSerializer.Deserialize<List<StockProfile>>(json, options);

        foreach (var stock in stocks)
        {
            Console.WriteLine($"{stock.Code} - {stock.Name} ({stock.Industry})");
        }
    }
}

小結

今天我們學會了:

  • JSON 是什麼:物件 {} 與陣列 []
  • System.Text.Json 的序列化與反序列化
  • NuGet:管理套件的方式
  • 實戰:API JSON → StockProfile


上一篇
Day 12 - 呼叫 Web API 基礎
下一篇
Day 14 - 本地資料儲存:LiteDB 簡介
系列文
30天快速上手製作WPF選股工具 — 從C#基礎到LiteDB與Web API整合14
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言