欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#下Newtonsoft.Json的具體使用

 更新時間:2025年07月23日 11:31:21   作者:生命不息-學無止境  
Newtonsoft.Json是一個非常流行的C# JSON 序列化和反序列化庫,它可以方便地將C#對象轉換為JSON 格式,或者將 JSON 數(shù)據(jù)解析為 C# 對象,下面就來介紹一下具體使用

Newtonsoft.Json 是一個非常流行的 C# JSON 序列化和反序列化庫,它可以方便地將 C# 對象轉換為 JSON 格式,或者將 JSON 數(shù)據(jù)解析為 C# 對象。Newtonsoft.Json 被廣泛用于處理 JSON 數(shù)據(jù),因其簡單、高效且功能強大。

以下是 Newtonsoft.Json 在 C# 中的詳細使用教程。

安裝 Newtonsoft.Json

在使用 Newtonsoft.Json 之前,你需要安裝它。最簡單的方式是通過 NuGet:

  1. 打開 Visual Studio。
  2. 在解決方案資源管理器中右鍵點擊項目,然后選擇“管理 NuGet 包”。
  3. 搜索 Newtonsoft.Json,然后點擊“安裝”。

也可以使用以下命令通過 NuGet 控制臺安裝:

Install-Package Newtonsoft.Json

基本用法

1. 序列化 C# 對象為 JSON

要將 C# 對象轉換為 JSON 字符串,可以使用 JsonConvert.SerializeObject() 方法。

using Newtonsoft.Json;

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

var person = new Person
{
    Name = "John",
    Age = 30
};

string json = JsonConvert.SerializeObject(person);
Console.WriteLine(json);

輸出:

{"Name":"John","Age":30}

2. 反序列化 JSON 為 C# 對象

要將 JSON 字符串轉換為 C# 對象,可以使用 JsonConvert.DeserializeObject<T>() 方法。

string json = "{\"Name\":\"John\",\"Age\":30}";

Person person = JsonConvert.DeserializeObject<Person>(json);
Console.WriteLine(person.Name);  // 輸出:John
Console.WriteLine(person.Age);   // 輸出:30

高級用法

1. 序列化時格式化 JSON(縮進)

為了提高可讀性,可以使用 Formatting.Indented 選項將 JSON 格式化為縮進的樣式:

string formattedJson = JsonConvert.SerializeObject(person, Formatting.Indented);
Console.WriteLine(formattedJson);

輸出:

{
  "Name": "John",
  "Age": 30
}

2. 處理復雜對象

Newtonsoft.Json 可以處理復雜的對象,例如包含嵌套對象或集合的對象。

public class Address
{
    public string Street { get; set; }
    public string City { get; set; }
}

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

var person = new Person
{
    Name = "John",
    Age = 30,
    Address = new Address { Street = "123 Main St", City = "New York" }
};

string json = JsonConvert.SerializeObject(person, Formatting.Indented);
Console.WriteLine(json);

輸出:

{
  "Name": "John",
  "Age": 30,
  "Address": {
    "Street": "123 Main St",
    "City": "New York"
  }
}

3. 反序列化為動態(tài)對象

可以將 JSON 解析為動態(tài)對象,允許你在運行時靈活地訪問 JSON 數(shù)據(jù)。

string json = "{\"Name\":\"John\",\"Age\":30}";

dynamic obj = JsonConvert.DeserializeObject<dynamic>(json);
Console.WriteLine(obj.Name);  // 輸出:John
Console.WriteLine(obj.Age);   // 輸出:30

4. 忽略屬性

如果你不希望某些屬性被序列化,可以使用 JsonIgnore 特性。

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

    [JsonIgnore]
    public int Age { get; set; }
}

var person = new Person
{
    Name = "John",
    Age = 30
};

string json = JsonConvert.SerializeObject(person);
Console.WriteLine(json);  // 輸出:{"Name":"John"}

5. 更改屬性名稱

可以使用 JsonProperty 特性為屬性指定自定義的 JSON 字段名稱。

public class Person
{
    [JsonProperty("full_name")]
    public string Name { get; set; }

    [JsonProperty("years")]
    public int Age { get; set; }
}

var person = new Person
{
    Name = "John",
    Age = 30
};

string json = JsonConvert.SerializeObject(person);
Console.WriteLine(json);  // 輸出:{"full_name":"John","years":30}

6. 處理枚舉

可以自定義枚舉的序列化方式,使其輸出字符串,而不是數(shù)字。

public enum Gender
{
    Male,
    Female
}

public class Person
{
    public string Name { get; set; }
    public Gender Gender { get; set; }
}

var person = new Person
{
    Name = "John",
    Gender = Gender.Male
};

string json = JsonConvert.SerializeObject(person);
Console.WriteLine(json);  // 輸出:{"Name":"John","Gender":0}

string jsonWithStringEnum = JsonConvert.SerializeObject(person, new StringEnumConverter());
Console.WriteLine(jsonWithStringEnum);  // 輸出:{"Name":"John","Gender":"Male"}

配置 JsonSerializerSettings

通過 JsonSerializerSettings,你可以更細粒度地控制 JSON 序列化和反序列化行為。

JsonSerializerSettings settings = new JsonSerializerSettings
{
    NullValueHandling = NullValueHandling.Ignore,
    DefaultValueHandling = DefaultValueHandling.Ignore
};

string json = JsonConvert.SerializeObject(person, settings);
Console.WriteLine(json);

處理自定義對象(自定義序列化與反序列化)

你可以通過實現(xiàn) JsonConverter 自定義對象的序列化和反序列化行為。

public class CustomPersonConverter : JsonConverter<Person>
{
    public override void WriteJson(JsonWriter writer, Person value, JsonSerializer serializer)
    {
        writer.WriteStartObject();
        writer.WritePropertyName("full_name");
        writer.WriteValue(value.Name);
        writer.WriteEndObject();
    }

    public override Person ReadJson(JsonReader reader, Type objectType, Person existingValue, bool hasExistingValue, JsonSerializer serializer)
    {
        JObject jo = JObject.Load(reader);
        return new Person { Name = (string)jo["full_name"] };
    }
}

var person = new Person { Name = "John", Age = 30 };
string customJson = JsonConvert.SerializeObject(person, new CustomPersonConverter());
Console.WriteLine(customJson);  // 輸出:{"full_name":"John"}

Person customPerson = JsonConvert.DeserializeObject<Person>(customJson, new CustomPersonConverter());
Console.WriteLine(customPerson.Name);  // 輸出:John

處理 JSON 數(shù)組

你可以將 JSON 數(shù)組序列化和反序列化為 C# 集合類型,如 List<T> 或數(shù)組。

string jsonArray = "[{\"Name\":\"John\",\"Age\":30},{\"Name\":\"Jane\",\"Age\":25}]";
List<Person> people = JsonConvert.DeserializeObject<List<Person>>(jsonArray);

foreach (var person in people)
{
    Console.WriteLine($"{person.Name}, {person.Age}");
}

總結

Newtonsoft.Json 是 C# 中最常用的 JSON 序列化和反序列化庫之一,具有強大的功能和易于使用的 API。它能夠處理簡單和復雜的對象,支持定制化序列化、反序列化,適用于動態(tài)對象以及復雜的數(shù)據(jù)結構。

到此這篇關于C#下Newtonsoft.Json的具體使用的文章就介紹到這了,更多相關C# Newtonsoft.Json內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C#中Dapper的使用教程

    C#中Dapper的使用教程

    Dapper是一款輕量級ORM工具(Github),Dapper語法十分簡單。并且無須遷就數(shù)據(jù)庫的設計,今天通過本文給大家介紹C# Dapper的使用,感興趣的朋友一起看看吧
    2021-07-07
  • C#實現(xiàn)綁定Combobox的方法

    C#實現(xiàn)綁定Combobox的方法

    這篇文章主要介紹了C#實現(xiàn)綁定Combobox的方法,涉及Combobox參數(shù)設置的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-08-08
  • C#隱藏控制臺鍵盤輸入的方法

    C#隱藏控制臺鍵盤輸入的方法

    這篇文章主要介紹了C#隱藏控制臺鍵盤輸入的方法,涉及C#針對系統(tǒng)底層調(diào)用的相關技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • Unity Shader實現(xiàn)新手引導遮罩鏤空效果

    Unity Shader實現(xiàn)新手引導遮罩鏤空效果

    這篇文章主要為大家詳細介紹了Unity Shader實現(xiàn)新手引導遮罩鏤空效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • 解析.NET中幾種Timer的使用

    解析.NET中幾種Timer的使用

    本文主要對.NET中4個Timer類,及其用法進行梳理,具有很好參考價值,需要的朋友一起來看下吧
    2016-12-12
  • C#自定義函數(shù)NetxtString生成隨機字符串

    C#自定義函數(shù)NetxtString生成隨機字符串

    這篇文章主要介紹了C#自定義函數(shù)NetxtString生成隨機字符串,是十分常見的重要功能,需要的朋友可以參考下
    2014-08-08
  • C#中的Dialog對話框

    C#中的Dialog對話框

    這篇文章介紹了C#中的Dialog對話框,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • C#實現(xiàn)自定義線程池實例代碼

    C#實現(xiàn)自定義線程池實例代碼

    這篇文章介紹了C#實現(xiàn)自定義線程池的實例代碼,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • C#使用SQLDMO操作數(shù)據(jù)庫的方法

    C#使用SQLDMO操作數(shù)據(jù)庫的方法

    這篇文章主要介紹了C#使用SQLDMO操作數(shù)據(jù)庫的方法,實例分析了基于SQLDMO.dll動態(tài)鏈接庫操作數(shù)據(jù)庫的相關技巧,需要的朋友可以參考下
    2015-06-06
  • C#對文件進行批量重命名或者對某單個文件進行改名的示例代碼

    C#對文件進行批量重命名或者對某單個文件進行改名的示例代碼

    這篇文章主要介紹了C#對文件進行批量重命名或者對某個單獨的文件進行改名的實現(xiàn)方法,文中有相關的代碼示例供大家參考,具有一定的參考價值,需要的朋友可以參考下
    2024-05-05

最新評論