最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C# JSON 序列化(原生 + 第三方Newtonsoft) 的使用

 更新時(shí)間:2026年07月05日 10:05:55   作者:影寂ldy  
本文主要介紹了本文對(duì)比原生DataContractJsonSerializer與第三方Newtonsoft.Json,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

一、JSON 基礎(chǔ)語(yǔ)法規(guī)則(必考)

1. 核心格式

  • {} 代表 單個(gè)對(duì)象
  • [] 代表 數(shù)組/集合
  • JSON 屬性名必須帶雙引號(hào)
  • 屬性值不能為函數(shù),只能是字符串、數(shù)字、布爾、數(shù)組、對(duì)象
  • 最后一個(gè)屬性末尾不能加逗號(hào),否則格式報(bào)錯(cuò)

標(biāo)準(zhǔn)JSON示例

[
  {
    "name": "張三",
    "age": 10
  },
  {
    "name": "李四",
    "age": 12
  }
]

二、原生JSON序列化(DataContractJsonSerializer)

1. 環(huán)境配置(必須操作)

原生JSON工具類需要手動(dòng)添加程序集引用:

項(xiàng)目引用 → 右鍵添加引用 → 程序集搜索 System.Runtime.Serialization → 勾選引入

命名空間:using System.Runtime.Serialization.Json;

2. 實(shí)體類說(shuō)明

原生JSON序列化 不需要 [Serializable] 特性(和二進(jìn)制序列化區(qū)別),可直接使用普通實(shí)體類。

public class People
{
    public string Name { get; set; }
    public string Age { get; set; }
    public string Sex { get; set; }
}

3. 原生JSON 序列化(寫(xiě)入文件)

對(duì)象 → JSON字符串 → 寫(xiě)入本地文件

private void button1_Click(object sender, EventArgs e)
{
    // 1. 實(shí)例化對(duì)象,接收頁(yè)面數(shù)據(jù)
    People p1 = new People()
    {
        Name = textBox1.Text,
        Age = textBox2.Text,
        Sex = textBox3.Text,
    };

    // 2. 創(chuàng)建文件流,覆蓋寫(xiě)入
    FileStream fs = new FileStream(@"1.txt", FileMode.Create);

    // 3. 原生JSON序列化工具,綁定實(shí)體類型
    DataContractJsonSerializer ds = new DataContractJsonSerializer(typeof(People));

    // 4. 序列化寫(xiě)入文件
    ds.WriteObject(fs, p1);

    // 5. 釋放資源
    fs.Close();
    fs.Dispose();
}

4. 原生JSON 反序列化(讀取文件)

本地JSON文件 → 還原為實(shí)體對(duì)象

private void button2_Click(object sender, EventArgs e)
{
    // 1. 打開(kāi)文件流
    FileStream fs = new FileStream(@"1.txt", FileMode.Open);

    // 2. 創(chuàng)建序列化工具
    DataContractJsonSerializer ds = new DataContractJsonSerializer(typeof(People));

    // 3. 反序列化 + 強(qiáng)制類型轉(zhuǎn)換
    People p1 = (People)ds.ReadObject(fs);

    // 4. 數(shù)據(jù)展示
    this.Text = p1.Name;

    // 5. 釋放資源
    fs.Close();
    fs.Dispose();
}

5. 原生JSON優(yōu)缺點(diǎn)

  • 優(yōu)點(diǎn):系統(tǒng)自帶、無(wú)需下載第三方包、無(wú)版本沖突
  • 缺點(diǎn):語(yǔ)法繁瑣、不支持直接序列化集合、適配復(fù)雜JSON較差

三、第三方JSON(Newtonsoft.Json)超重點(diǎn)

1. NuGet 安裝步驟

右鍵項(xiàng)目 → 管理NuGet程序包 → 瀏覽 → 搜索 Newtonsoft.Json → 下載安裝

命名空間:using Newtonsoft.Json;

2. 實(shí)體類

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

3. 集合初始化

List<Student> list = new List<Student>();
public Form1()
{
    InitializeComponent();
    // 循環(huán)批量生成測(cè)試數(shù)據(jù)
    for (int i = 0; i < 10; i++)
    {
        Student s1 = new Student()
        {
            Name = "哈蘭德" + i,
            Age = i * 10,
            Info = "前鋒"
        };
        list.Add(s1);
    }
}

4. 第三方序列化(超級(jí)簡(jiǎn)潔)

對(duì)象/集合 轉(zhuǎn) JSON字符串,一行代碼完成

private void button1_Click(object sender, EventArgs e)
{
    // 集合序列化為JSON字符串
    string data = JsonConvert.SerializeObject(list);
    // 寫(xiě)入本地文件
    File.WriteAllText(@"1.txt", data);
}

5. 第三方反序列化

JSON字符串 還原 集合/對(duì)象

private void button2_Click(object sender, EventArgs e)
{
    // 讀取本地JSON文本
    string data = File.ReadAllText(@"1.txt");
    // 反序列化為學(xué)生集合
    List<Student> s1 = JsonConvert.DeserializeObject<List<Student>>(data);

    // 遍歷展示數(shù)據(jù)
    string ss = "";
    foreach (var item in s1)
    {
        ss += item.Name;
    }
    this.Text = ss;
}

四、復(fù)雜JSON嵌套解析(實(shí)戰(zhàn)項(xiàng)目級(jí))

1. 多層嵌套實(shí)體類

適配接口/小說(shuō)圖文類JSON數(shù)據(jù),多層嵌套實(shí)體映射

private void button3_Click(object sender, EventArgs e)
{
    // 讀取復(fù)雜JSON文件
    string data = File.ReadAllText(@"漫畫(huà).txt", Encoding.Default);
    // 反序列化為根對(duì)象
    XiaoShuoRoot root = JsonConvert.DeserializeObject<XiaoShuoRoot>(data);

    // 遍歷文本數(shù)據(jù)展示
    foreach (var item in root.hits.topicMessageList)
    {
        richTextBox1.Text += item.author_name + "\n";
    }

    // 動(dòng)態(tài)創(chuàng)建圖片控件排版
    createPic(panel1, 2, 8, 100, 100, 10, root.hits.topicMessageList);
}
// 圖片、作者信息節(jié)點(diǎn)
public class TopicMessageList
{
    public string cover_image_url { get; set; }
    public string author_name { get; set; }
}

// 數(shù)據(jù)集合節(jié)點(diǎn)
public class Hits
{
    public List<TopicMessageList> topicMessageList { get; set; }
}

// JSON根節(jié)點(diǎn)
public class XiaoShuoRoot
{
    public int code { get; set; }
    public string message { get; set; }
    public int total { get; set; }
    public Hits hits { get; set; }
}

2. 復(fù)雜JSON解析 + 動(dòng)態(tài)創(chuàng)建控件

讀取本地JSON → 解析嵌套數(shù)據(jù) → 動(dòng)態(tài)生成PictureBox圖片控件排版展示

private void button3_Click(object sender, EventArgs e)
{
    // 讀取復(fù)雜JSON文件
    string data = File.ReadAllText(@"漫畫(huà).txt", Encoding.Default);
    // 反序列化為根對(duì)象
    XiaoShuoRoot root = JsonConvert.DeserializeObject<XiaoShuoRoot>(data);

    // 遍歷文本數(shù)據(jù)展示
    foreach (var item in root.hits.topicMessageList)
    {
        richTextBox1.Text += item.author_name + "\n";
    }

    // 動(dòng)態(tài)創(chuàng)建圖片控件排版
    createPic(panel1, 2, 8, 100, 100, 10, root.hits.topicMessageList);
}

3. 動(dòng)態(tài)PictureBox生成方法

自動(dòng)行列排版、設(shè)置大小、間距、圖片路徑、邊框樣式

/// <summary>
/// 動(dòng)態(tài)批量創(chuàng)建PictureBox圖片控件
/// </summary>
private void createPic(Panel p1, int rows, int col, int width, int height, int space, List<TopicMessageList> a)
{
    int count = -1;
    int startX = 10; // 起始X坐標(biāo)
    int startY = 10; // 起始Y坐標(biāo)

    // 雙層循環(huán)實(shí)現(xiàn)行列排版
    for (int i = 0; i < rows; i++)
    {
        for (int j = 0; j < col; j++)
        {
            count++;
            PictureBox pic = new PictureBox()
            {
                BorderStyle = BorderStyle.FixedSingle, // 邊框樣式
                Width = width,
                Height = height,
                SizeMode = PictureBoxSizeMode.StretchImage, // 圖片拉伸適配
                BackColor = Color.Red,
                ImageLocation = a[count].cover_image_url // 網(wǎng)絡(luò)圖片地址
            };

            // 設(shè)置控件坐標(biāo)
            pic.Left = startX + j * (width + space);
            pic.Top = startY + i * (height + space);

            // 添加到容器
            p1.Controls.Add(pic);
        }
    }
}

五、原生JSON VS 第三方JSON(核心對(duì)比)

對(duì)比項(xiàng)

原生 DataContractJsonSerializer

第三方 Newtonsoft.Json

安裝方式

系統(tǒng)自帶,添加程序集引用

NuGet手動(dòng)安裝

語(yǔ)法簡(jiǎn)潔度

繁瑣,需手動(dòng)操作文件流

極簡(jiǎn),一行代碼序列化/反序列化

集合支持

支持差,寫(xiě)法復(fù)雜

完美支持集合、嵌套JSON

適用場(chǎng)景

簡(jiǎn)單單個(gè)對(duì)象序列化

項(xiàng)目開(kāi)發(fā)、接口解析、復(fù)雜數(shù)據(jù)

六、全套易錯(cuò)點(diǎn)匯總

  • JSON格式最后一個(gè)字段不能加逗號(hào),否則解析失敗
  • 原生JSON必須手動(dòng)引入 System.Runtime.Serialization 程序集
  • 第三方JSON必須安裝NuGet包,否則無(wú)法識(shí)別JsonConvert
  • 反序列化實(shí)體結(jié)構(gòu)必須和JSON結(jié)構(gòu)完全對(duì)應(yīng)(字段名、嵌套層級(jí))
  • 動(dòng)態(tài)控件創(chuàng)建需設(shè)置坐標(biāo),否則所有控件重疊在一起
  • 二進(jìn)制序列化需要 [Serializable],JSON序列化不需要

七、背誦口訣

JSON大括號(hào)對(duì)象,中括號(hào)存數(shù)組行;

原生需引程序集,寫(xiě)法繁瑣流手動(dòng);

第三方包NuGet裝,一行代碼轉(zhuǎn)陰陽(yáng);

嵌套數(shù)據(jù)實(shí)體配,動(dòng)態(tài)控件排版強(qiáng)。

到此這篇關(guān)于C# JSON 序列化(原生 + 第三方Newtonsoft) 的使用的文章就介紹到這了,更多相關(guān)C# JSON 序列化內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#中l(wèi)ock死鎖實(shí)例教程

    C#中l(wèi)ock死鎖實(shí)例教程

    這篇文章主要介紹了C#中l(wèi)ock死鎖的用法,對(duì)于共享資源的訪問(wèn)及C#程序設(shè)計(jì)的安全性而言,有著非常重要的意義!需要的朋友可以參考下
    2014-08-08
  • C#使用Spire.XLS for .NET將Excel轉(zhuǎn)換為SVG圖片

    C#使用Spire.XLS for .NET將Excel轉(zhuǎn)換為SVG圖片

    在C#開(kāi)發(fā)中,C# Excel轉(zhuǎn)換為SVG的需求日益增長(zhǎng),尤其Web應(yīng)用中Excel矢量預(yù)覽已成為痛點(diǎn)解決關(guān)鍵,本文客觀分享實(shí)現(xiàn)路徑與代碼,幫助C#開(kāi)發(fā)者快速集成,提升項(xiàng)目效率,需要的朋友可以參考下
    2026-03-03
  • 詳解C#調(diào)用matlab生成的dll庫(kù)

    詳解C#調(diào)用matlab生成的dll庫(kù)

    這篇文章主要介紹了C#調(diào)用matlab生成的dll庫(kù),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-09-09
  • c#如何用好垃圾回收機(jī)制GC

    c#如何用好垃圾回收機(jī)制GC

    這篇文章主要介紹了c# 如何用好垃圾回收機(jī)制GC,幫助大家更好的理解和學(xué)習(xí)c#,感興趣的朋友可以了解下
    2020-08-08
  • C#操作Word中水印添加和移除的完整指南

    C#操作Word中水印添加和移除的完整指南

    在軟件系統(tǒng)開(kāi)發(fā)過(guò)程中,文檔處理功能往往是企業(yè)級(jí)應(yīng)用的重要組成部分,本文將詳細(xì)介紹如何利用?Spire.Doc?for?.NET?組件,通過(guò)?C#?代碼實(shí)現(xiàn)?Word?文檔中文本水印的添加、圖片水印的添加以及已有水印的移除操作,有需要的小伙伴可以了解下
    2026-05-05
  • C#實(shí)現(xiàn)任務(wù)欄通知窗口

    C#實(shí)現(xiàn)任務(wù)欄通知窗口

    作為程序員在享受的同時(shí)我們也不禁要問(wèn):這到底是怎么實(shí)現(xiàn)的呢?本文就利用Visual Studio .Net C# 2005以及.Net框架繪圖技術(shù)來(lái)實(shí)現(xiàn)這種任務(wù)欄通知窗口。
    2015-10-10
  • c#線程同步使用詳解示例

    c#線程同步使用詳解示例

    這篇文章主要介紹了c#線程同步使用方法,介紹幾種常用的C#進(jìn)行線程同步的方式,需要的朋友可以參考下
    2014-02-02
  • C#使用System.Net庫(kù)實(shí)現(xiàn)自動(dòng)發(fā)送郵件功能

    C#使用System.Net庫(kù)實(shí)現(xiàn)自動(dòng)發(fā)送郵件功能

    在C#編程環(huán)境中,實(shí)現(xiàn)郵件發(fā)送功能是一項(xiàng)常見(jiàn)的需求,無(wú)論是Web應(yīng)用程序還是Windows窗體應(yīng)用程序,下面小編就來(lái)為大家講講如何使用System.Net庫(kù)實(shí)現(xiàn)這一功能吧
    2025-03-03
  • C#實(shí)現(xiàn)自定義圓角按鈕的方法

    C#實(shí)現(xiàn)自定義圓角按鈕的方法

    Winform中自帶的button沒(méi)有圓角屬性,所以我們繼承Button類,重寫(xiě)OnPaint事件來(lái)繪制圓角按鈕。下面通過(guò)實(shí)例代碼給大家介紹下C#實(shí)現(xiàn)自定義圓角按鈕的方法,需要的朋友參考下吧
    2021-11-11
  • C# 使用Microsoft Edge WebView2的相關(guān)總結(jié)

    C# 使用Microsoft Edge WebView2的相關(guān)總結(jié)

    這篇文章主要介紹了C# 使用Microsoft Edge WebView2的相關(guān)總結(jié),幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下
    2021-02-02

最新評(píng)論

新闻| 弥渡县| 西宁市| 太和县| 绥滨县| 云林县| 藁城市| 平南县| 神木县| 吴江市| 汤原县| 体育| 海淀区| 花垣县| 红安县| 菏泽市| 五河县| 霍州市| 永德县| 许昌市| 广安市| 健康| 黄浦区| 鹰潭市| 屏山县| 芒康县| 丰城市| 平南县| 泸西县| 讷河市| 青海省| 梧州市| 河东区| 台北市| 烟台市| 贵港市| 岑溪市| 重庆市| 龙陵县| 怀仁县| 南投县|