跳過到頁腳內容
.NET幫助

C# Json 序列化(開發者的工作原理)

在現代軟件開發領域,數據交換格式在促進不同系統之間的交流中起著至關重要的作用。 其中一個獲得極大人氣的格式是JSON(JavaScript Object Notation)。

C#開發人員常常會與JSON數據打交道,為了促進流暢的互動,C#提供了一個強大的工具——C# JSON序列化器。

在本文中,我們將討論什麼是JSON序列化及其用途。 此外,我們將嘗試使用IronPDF PDF庫的例子來理解JSON序列化過程。

1. 理解C# JSON序列化器

C# JSON序列化器是一個將C#對象轉換為其JSON表示形式的組件,反之亦然。 這一過程稱為序列化和反序列化,在C#應用程式與外部系統或服務之間交換數據時至關重要。

考慮一個場景,即一家電子商務應用程式需要向手機應用程式發送商品信息。應用程式可以使用JSON序列化器將對象轉換為一種普遍認可且易於各平台使用的JSON格式,而不是發送手機應用程式可能不理解的原始C#對象。

1.1. C# JSON序列化示例

讓我們深入研究一個簡單的例子來說明這個概念。 假設我們有一個代表個人的C#類:

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}
public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}
Public Class Person
	Public Property Name() As String
	Public Property Age() As Integer
End Class
$vbLabelText   $csharpLabel

使用C# JSON序列化,我們可以將此類的實例轉換為JSON字符串:

Person person = new Person { Name = "John Doe", Age = 30 };
string json = JsonConvert.SerializeObject(person);
Person person = new Person { Name = "John Doe", Age = 30 };
string json = JsonConvert.SerializeObject(person);
Dim person As New Person With {
	.Name = "John Doe",
	.Age = 30
}
Dim json As String = JsonConvert.SerializeObject(person)
$vbLabelText   $csharpLabel

最終的JSON字符串將會是{"Name":"John Doe","Age":30},表示以JSON格式的個人對象。

2. C# JSON序列化器的類型和代碼示例

C#提供了各種方式來執行JSON序列化,每種方式都有其自己的一套特性和用例。 以下是一些在C#中常用的JSON序列化方法:

2.1. DataContractJsonSerializer

這個序列化器是System.Runtime.Serialization.Json命名空間的一部分,並使用數據合約屬性來控制序列化過程。

using System;
using System.IO;
using System.Runtime.Serialization.Json;
using System.Text;

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

class Program
{
    static void Main()
    {
        Person person = new Person { Name = "John Doe", Age = 30 };
        DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(Person));
        using (MemoryStream stream = new MemoryStream())
        {
            serializer.WriteObject(stream, person);
            string json = Encoding.UTF8.GetString(stream.ToArray());
            Console.WriteLine("Serialized JSON using DataContractJsonSerializer:");
            Console.WriteLine(json);
        }
    }
}
using System;
using System.IO;
using System.Runtime.Serialization.Json;
using System.Text;

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

class Program
{
    static void Main()
    {
        Person person = new Person { Name = "John Doe", Age = 30 };
        DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(Person));
        using (MemoryStream stream = new MemoryStream())
        {
            serializer.WriteObject(stream, person);
            string json = Encoding.UTF8.GetString(stream.ToArray());
            Console.WriteLine("Serialized JSON using DataContractJsonSerializer:");
            Console.WriteLine(json);
        }
    }
}
Imports System
Imports System.IO
Imports System.Runtime.Serialization.Json
Imports System.Text

Public Class Person
	Public Property Name() As String
	Public Property Age() As Integer
End Class

Friend Class Program
	Shared Sub Main()
		Dim person As New Person With {
			.Name = "John Doe",
			.Age = 30
		}
		Dim serializer As New DataContractJsonSerializer(GetType(Person))
		Using stream As New MemoryStream()
			serializer.WriteObject(stream, person)
			Dim json As String = Encoding.UTF8.GetString(stream.ToArray())
			Console.WriteLine("Serialized JSON using DataContractJsonSerializer:")
			Console.WriteLine(json)
		End Using
	End Sub
End Class
$vbLabelText   $csharpLabel

2.2. JavaScriptSerializer

此序列化器位於System.Web.Script.Serialization命名空間,是ASP.NET的一部分,提供了一種簡單的方法將對象序列化為JSON格式。

using System;
using System.Web.Script.Serialization;

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

class Program
{
    static void Main()
    {
        Person person = new Person { Name = "John Doe", Age = 30 };
        JavaScriptSerializer serializer = new JavaScriptSerializer();
        string json = serializer.Serialize(person);
        Console.WriteLine("Serialized JSON using JavaScriptSerializer:");
        Console.WriteLine(json);
    }
}
using System;
using System.Web.Script.Serialization;

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

class Program
{
    static void Main()
    {
        Person person = new Person { Name = "John Doe", Age = 30 };
        JavaScriptSerializer serializer = new JavaScriptSerializer();
        string json = serializer.Serialize(person);
        Console.WriteLine("Serialized JSON using JavaScriptSerializer:");
        Console.WriteLine(json);
    }
}
Imports System
Imports System.Web.Script.Serialization

Public Class Person
	Public Property Name() As String
	Public Property Age() As Integer
End Class

Friend Class Program
	Shared Sub Main()
		Dim person As New Person With {
			.Name = "John Doe",
			.Age = 30
		}
		Dim serializer As New JavaScriptSerializer()
		Dim json As String = serializer.Serialize(person)
		Console.WriteLine("Serialized JSON using JavaScriptSerializer:")
		Console.WriteLine(json)
	End Sub
End Class
$vbLabelText   $csharpLabel

2.3. Json.NET (Newtonsoft.Json)

Json.NET (Newtonsoft.Json)是一個用於C#中JSON序列化的廣泛使用的第三方庫。 它提供了靈活性,性能和豐富的功能集。

using System;
using Newtonsoft.Json;

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

class Program
{
    static void Main()
    {
        Person person = new Person { Name = "John Doe", Age = 30 };
        string json = JsonConvert.SerializeObject(person);
        Console.WriteLine("Serialized JSON using Json.NET (Newtonsoft.Json):");
        Console.WriteLine(json);
    }
}
using System;
using Newtonsoft.Json;

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

class Program
{
    static void Main()
    {
        Person person = new Person { Name = "John Doe", Age = 30 };
        string json = JsonConvert.SerializeObject(person);
        Console.WriteLine("Serialized JSON using Json.NET (Newtonsoft.Json):");
        Console.WriteLine(json);
    }
}
Imports System
Imports Newtonsoft.Json

Public Class Person
	Public Property Name() As String
	Public Property Age() As Integer
End Class

Friend Class Program
	Shared Sub Main()
		Dim person As New Person With {
			.Name = "John Doe",
			.Age = 30
		}
		Dim json As String = JsonConvert.SerializeObject(person)
		Console.WriteLine("Serialized JSON using Json.NET (Newtonsoft.Json):")
		Console.WriteLine(json)
	End Sub
End Class
$vbLabelText   $csharpLabel

3. 何時使用C# JSON序列化器

了解何時使用C# JSON序列化對於高效且無錯誤的數據交換至關重要。 以下是使用JSON序列化器的常見場景:

3.1. 網絡API

在開發與客戶端應用程式通信的網絡API時,由於其輕量且易於人閱讀的特性,JSON是數據交換的首選格式。

3.2. 配置設置

以JSON格式存儲和閱讀配置設置是一種常見的做法。JSON序列化簡化了將這些設置在C#對象和JSON之間轉換的過程。

3.3. 互操作性

在C#應用程式與其他語言開發的系統集成時,JSON提供了一種語言無關的數據格式,確保無縫的互操作性。

4. 什麼是反序列化的JSON字符串?

反序列化是將JSON字符串轉換回其等價的C#對象的過程。 當處理從外部來源獲得的數據(如網絡API或存儲的JSON數據)時,這是一個至關重要的步驟。

在C#中,用於序列化的相同序列化器通常可以用於反序列化。 讓我們用Json.NET (Newtonsoft.Json)來說明反序列化的簡單例子:

using System;
using Newtonsoft.Json;

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

class Program
{
    static void Main()
    {
        string json = "{\"Name\":\"John Doe\",\"Age\":30}";
        Person deserializedPerson = JsonConvert.DeserializeObject<Person>(json);
        Console.WriteLine("Deserialized Person:");
        Console.WriteLine($"Name: {deserializedPerson.Name}, Age: {deserializedPerson.Age}");
    }
}
using System;
using Newtonsoft.Json;

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

class Program
{
    static void Main()
    {
        string json = "{\"Name\":\"John Doe\",\"Age\":30}";
        Person deserializedPerson = JsonConvert.DeserializeObject<Person>(json);
        Console.WriteLine("Deserialized Person:");
        Console.WriteLine($"Name: {deserializedPerson.Name}, Age: {deserializedPerson.Age}");
    }
}
Imports System
Imports Newtonsoft.Json

Public Class Person
	Public Property Name() As String
	Public Property Age() As Integer
End Class

Friend Class Program
	Shared Sub Main()
		Dim json As String = "{""Name"":""John Doe"",""Age"":30}"
		Dim deserializedPerson As Person = JsonConvert.DeserializeObject(Of Person)(json)
		Console.WriteLine("Deserialized Person:")
		Console.WriteLine($"Name: {deserializedPerson.Name}, Age: {deserializedPerson.Age}")
	End Sub
End Class
$vbLabelText   $csharpLabel

5. 在C#中介紹IronPDF

現在我們已經對C# JSON序列化有了一個堅實的理解,讓我們探索IronPDF C# 庫的集成,這是一個用於在C#中處理PDF的強大庫。 IronPDF簡化了生成和操作PDF文件的過程,為涉及PDF的情況提供了一個極好的選擇。

5.1. IronPDF簡介

IronPDF是一個C#庫,允許開發人員在其應用程式中創建、操作和渲染PDF文件。 無論您是需要生成發票、報告或任何其他類型的PDF文件,IronPDF都提供了一個方便且功能豐富的解決方案。

IronPDF的HTML到PDF轉換功能是一個亮點,可以保持您的布局和樣式。 它可以將網絡內容轉換為PDF,適合用於報告、發票和文檔。 您可以輕鬆地將HTML文件、URL和HTML字符串轉換為PDF。

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert an HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert an HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert a URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert an HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert an HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert a URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
Imports IronPdf

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim renderer = New ChromePdfRenderer()

		' 1. Convert an HTML String to PDF
		Dim htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"
		Dim pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent)
		pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf")

		' 2. Convert an HTML File to PDF
		Dim htmlFilePath = "path_to_your_html_file.html" ' Specify the path to your HTML file
		Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath)
		pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf")

		' 3. Convert a URL to PDF
		Dim url = "http://ironpdf.com" ' Specify the URL
		Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
		pdfFromUrl.SaveAs("URLToPDF.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel

要開始使用IronPDF,您首先需要安裝IronPDF NuGet包:

Install-Package IronPdf

安裝後,您可以使用IronPDF庫在您的C#應用程式中執行各種與PDF相關的任務。

5.2. 使用C# JSON序列化器與IronPDF代碼

現在,讓我們探索C# JSON序列化如何能夠無縫集成到IronPDF中的一個實際例子。 考慮一個情境,即您有一個數據集合需要在PDF報告中呈現。

數據最初以C#對象存儲,並需要在使用IronPDF嵌入到PDF文檔中之前轉換為JSON格式。

5.3. 代碼示例

using IronPdf;
using Newtonsoft.Json;
using System.Collections.Generic;

public class ReportData
{
    public string Title { get; set; }
    public string Content { get; set; }
}

public class Program
{
    static void Main()
    {
        var data = new List<ReportData>
        {
            new ReportData { Title = "Section 1", Content = "Lorem ipsum dolor sit amet." },
            new ReportData { Title = "Section 2", Content = "Consectetur adipiscing elit." },
            // Add more data as needed
        };

        // Convert data to JSON format
        string jsonData = JsonConvert.SerializeObject(data);

        // Create a PDF document using IronPDF
        var renderer = new ChromePdfRenderer();

        // Embed JSON data into the PDF
        string htmlContent = $"<html><body><h4>{jsonData}</h4></body></html>";
        var pdfDocument = renderer.RenderHtmlAsPdf(htmlContent);

        // Save or display the PDF as needed
        pdfDocument.SaveAs("Report.pdf");
    }
}
using IronPdf;
using Newtonsoft.Json;
using System.Collections.Generic;

public class ReportData
{
    public string Title { get; set; }
    public string Content { get; set; }
}

public class Program
{
    static void Main()
    {
        var data = new List<ReportData>
        {
            new ReportData { Title = "Section 1", Content = "Lorem ipsum dolor sit amet." },
            new ReportData { Title = "Section 2", Content = "Consectetur adipiscing elit." },
            // Add more data as needed
        };

        // Convert data to JSON format
        string jsonData = JsonConvert.SerializeObject(data);

        // Create a PDF document using IronPDF
        var renderer = new ChromePdfRenderer();

        // Embed JSON data into the PDF
        string htmlContent = $"<html><body><h4>{jsonData}</h4></body></html>";
        var pdfDocument = renderer.RenderHtmlAsPdf(htmlContent);

        // Save or display the PDF as needed
        pdfDocument.SaveAs("Report.pdf");
    }
}
Imports IronPdf
Imports Newtonsoft.Json
Imports System.Collections.Generic

Public Class ReportData
	Public Property Title() As String
	Public Property Content() As String
End Class

Public Class Program
	Shared Sub Main()
		Dim data = New List(Of ReportData) From {
			New ReportData With {
				.Title = "Section 1",
				.Content = "Lorem ipsum dolor sit amet."
			},
			New ReportData With {
				.Title = "Section 2",
				.Content = "Consectetur adipiscing elit."
			}
		}

		' Convert data to JSON format
		Dim jsonData As String = JsonConvert.SerializeObject(data)

		' Create a PDF document using IronPDF
		Dim renderer = New ChromePdfRenderer()

		' Embed JSON data into the PDF
		Dim htmlContent As String = $"<html><body><h4>{jsonData}</h4></body></html>"
		Dim pdfDocument = renderer.RenderHtmlAsPdf(htmlContent)

		' Save or display the PDF as needed
		pdfDocument.SaveAs("Report.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel

在此示例中,ReportData類代表報告中每個章節的數據結構。 data列表包含此類的實例。

數據使用JsonConvert.SerializeObject序列化為JSON,並將最終得到的JSON字符串嵌入到HTML模板中。 然後使用IronPDF將此HTML模板轉換為PDF文檔。

5.4. 輸出

C# Json Serializer(開發人員如何作用)圖1

6. 結論

總而言之,C# JSON序列化是一種處理C#應用中的數據交換的基本工具。

無論您是在與網絡API、配置設置還是與其他語言的系統集成時工作,理解和利用C# JSON序列化可以大大提高您應用的效率和靈活性。

當涉及到在C#中處理PDF時,IronPDF提供了一個強大的解決方案來創建、操縱和渲染PDF文檔。

通過結合C# JSON序列化和IronPDF的力量,開發人員可以將C#對象中的數據無縫集成到PDF報告中,為在其應用中生成動態和數據驅動的PDF內容開闢了新可能。

隨著軟件開發世界的持續演變,掌握這些工具在構建可靠和可互操作的解決方案方面變得越來越重要。

IronPDF offers a free trial license, which is a great opportunity to test and familiarize yourself with the C# PDF Library IronPDF Pricing with pricing starting from $799 for the lite version.

了解如何開始使用IronPDF,請訪問IronPDF 文檔

常見問題解答

怎樣在 C# 中將 HTML 轉換為 PDF?

您可以使用 IronPDF 的 RenderHtmlAsPdf 方法將 HTML 字符串轉換為 PDF。您還可以使用 RenderHtmlFileAsPdf 將 HTML 文件轉換為 PDF。

什麼是 C# 中的 JSON 序列化及為什麼它很重要?

C# 中的 JSON 序列化是指將 C# 物件轉換成其 JSON 表示形式的過程,這對於應用程式與外部系統間的資料交換至關重要。這使得它成為像是網頁 API 和配置設置的場景中不可或缺的工具。

有哪些主要的 C# JSON 序列化程式可用?

主要的 C# JSON 序列化程式包括 DataContractJsonSerializer、JavaScriptSerializer 和 Json.NET(Newtonsoft.Json),它們各自提供不同的功能以適合不同的使用情境。

如何將 JSON 資料嵌入 C# 的 PDF 文件中?

您可以將 C# 物件序列化成 JSON 格式,然後利用 IronPDF 的 HTML 呈現能力將此 JSON 資料嵌入到 PDF 文件中。

我可以將 JSON 字串轉回 C# 物件嗎?怎麼做?

是的,您可以透過反序列化的過程將 JSON 字串轉回 C# 物件。Json.NET(Newtonsoft.Json)提供強大的功能來將 JSON 反序列化成 C# 物件。

IronPDF 在 C# 中從 JSON 生成 PDF 的過程中起到什麼作用?

IronPDF 允許開發人員通過呈現包含 JSON 資料的 HTML 內容來創建 PDF。這種整合對於生成動態和資料驅動的 PDF 非常有用。

如何在 C# 專案中安裝 PDF 庫?

您可以通過使用 NuGet 套件管理器將相關的庫包(如 IronPDF)添加到您的項目中,從而在 C# 項目中安裝 PDF 庫。

JSON 序列化如何增強系統間的互操作性?

JSON 序列化通過提供語言不可知的資料格式,增強了各種系統之間的互操作性,這使得可能在不同語言中開發的系統可以無縫進行資料交換。

在 C# 中使用 Json.NET 進行 JSON 序列化有哪些好處?

Json.NET(Newtonsoft.Json)提供靈活性、性能和全面的功能集,使其成為 C# 應用程式中進行 JSON 序列化的首選。

使用 IronPDF 和 JSON 序列化於 C# 中的實用範例是什麼?

一個實用範例是將 C# 物件轉換成 JSON 格式,並使用 IronPDF 將此 JSON 嵌入到 PDF 文件中,從而創建可輕鬆共享和列印的動態報告。

Curtis Chau
技術作家

Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。

除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。