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

C# Newtonsoft.Json庫的常用屬性和方法詳解

 更新時間:2025年03月14日 09:03:04   作者:老胖閑聊  
Newtonsoft.Json(也稱為Json.NET)是一個非常流行的用于處理JSON數(shù)據(jù)的庫,它提供了豐富的屬性和方法,用于序列化和反序列化JSON數(shù)據(jù),下面將通過C#代碼詳細講解一些常用的屬性和方法,并提供詳細的代碼注釋,需要的朋友可以參考下

1. 安裝Newtonsoft.Json

首先,需要通過NuGet安裝Newtonsoft.Json庫??梢酝ㄟ^以下命令安裝:

Install-Package Newtonsoft.Json

2. 基本序列化和反序列化

序列化(將對象轉換為JSON字符串)

using Newtonsoft.Json;
using System;

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

class Program
{
    static void Main()
    {
        // 創(chuàng)建一個Person對象
        Person person = new Person { Name = "John", Age = 30 };

        // 使用JsonConvert.SerializeObject方法將對象序列化為JSON字符串
        string json = JsonConvert.SerializeObject(person);

        // 輸出JSON字符串
        Console.WriteLine(json);
        // 輸出: {"Name":"John","Age":30}
    }
}

反序列化(將JSON字符串轉換為對象)

using Newtonsoft.Json;
using System;

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

class Program
{
    static void Main()
    {
        // JSON字符串
        string json = "{\"Name\":\"John\",\"Age\":30}";

        // 使用JsonConvert.DeserializeObject方法將JSON字符串反序列化為Person對象
        Person person = JsonConvert.DeserializeObject<Person>(json);

        // 輸出對象的屬性
        Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
        // 輸出: Name: John, Age: 30
    }
}

3. 格式化JSON輸出

可以使用Formatting.Indented來格式化JSON輸出,使其更易讀。

using Newtonsoft.Json;
using System;

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

class Program
{
    static void Main()
    {
        // 創(chuàng)建一個Person對象
        Person person = new Person { Name = "John", Age = 30 };

        // 使用JsonConvert.SerializeObject方法將對象序列化為JSON字符串,并格式化輸出
        string json = JsonConvert.SerializeObject(person, Formatting.Indented);

        // 輸出格式化后的JSON字符串
        Console.WriteLine(json);
        // 輸出:
        // {
        //   "Name": "John",
        //   "Age": 30
        // }
    }
}

4. 處理JSON屬性名稱

可以使用[JsonProperty]屬性來指定JSON屬性名稱與C#屬性名稱不同。

using Newtonsoft.Json;
using System;

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

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

class Program
{
    static void Main()
    {
        // 創(chuàng)建一個Person對象
        Person person = new Person { Name = "John", Age = 30 };

        // 序列化對象
        string json = JsonConvert.SerializeObject(person);

        // 輸出JSON字符串
        Console.WriteLine(json);
        // 輸出: {"full_name":"John","years_old":30}

        // 反序列化JSON字符串
        Person deserializedPerson = JsonConvert.DeserializeObject<Person>(json);

        // 輸出對象的屬性
        Console.WriteLine($"Name: {deserializedPerson.Name}, Age: {deserializedPerson.Age}");
        // 輸出: Name: John, Age: 30
    }
}

5. 忽略屬性

可以使用[JsonIgnore]屬性來忽略某個屬性,使其不參與序列化和反序列化。

using Newtonsoft.Json;
using System;

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

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

class Program
{
    static void Main()
    {
        // 創(chuàng)建一個Person對象
        Person person = new Person { Name = "John", Age = 30 };

        // 序列化對象
        string json = JsonConvert.SerializeObject(person);

        // 輸出JSON字符串
        Console.WriteLine(json);
        // 輸出: {"Name":"John"}

        // 反序列化JSON字符串
        Person deserializedPerson = JsonConvert.DeserializeObject<Person>(json);

        // 輸出對象的屬性
        Console.WriteLine($"Name: {deserializedPerson.Name}, Age: {deserializedPerson.Age}");
        // 輸出: Name: John, Age: 0 (Age被忽略,默認值為0)
    }
}

6. 處理空值

可以使用NullValueHandling來控制序列化時如何處理空值。

using Newtonsoft.Json;
using System;

public class Person
{
    public string Name { get; set; }
    public int? Age { get; set; } // 使用可空類型
}

class Program
{
    static void Main()
    {
        // 創(chuàng)建一個Person對象,Age為null
        Person person = new Person { Name = "John", Age = null };

        // 序列化對象,忽略空值
        var settings = new JsonSerializerSettings
        {
            NullValueHandling = NullValueHandling.Ignore
        };
        string json = JsonConvert.SerializeObject(person, settings);

        // 輸出JSON字符串
        Console.WriteLine(json);
        // 輸出: {"Name":"John"}

        // 反序列化JSON字符串
        Person deserializedPerson = JsonConvert.DeserializeObject<Person>(json);

        // 輸出對象的屬性
        Console.WriteLine($"Name: {deserializedPerson.Name}, Age: {deserializedPerson.Age}");
        // 輸出: Name: John, Age: (Age為null)
    }
}

7. 自定義序列化和反序列化

可以通過實現(xiàn)JsonConverter來自定義序列化和反序列化邏輯。

using Newtonsoft.Json;
using System;

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

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

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

class Program
{
    static void Main()
    {
        // 創(chuàng)建一個Person對象
        Person person = new Person { Name = "John", Age = 30 };

        // 使用自定義的PersonConverter進行序列化
        string json = JsonConvert.SerializeObject(person, new PersonConverter());

        // 輸出JSON字符串
        Console.WriteLine(json);
        // 輸出: {"full_name":"John","years_old":30}

        // 使用自定義的PersonConverter進行反序列化
        Person deserializedPerson = JsonConvert.DeserializeObject<Person>(json, new PersonConverter());

        // 輸出對象的屬性
        Console.WriteLine($"Name: {deserializedPerson.Name}, Age: {deserializedPerson.Age}");
        // 輸出: Name: John, Age: 30
    }
}

8. 處理日期格式

可以使用DateFormatString來指定日期的序列化格式。

using Newtonsoft.Json;
using System;

public class Event
{
    public string Name { get; set; }
    public DateTime Date { get; set; }
}

class Program
{
    static void Main()
    {
        // 創(chuàng)建一個Event對象
        Event event = new Event { Name = "Conference", Date = new DateTime(2023, 10, 15) };

        // 使用DateFormatString指定日期格式
        var settings = new JsonSerializerSettings
        {
            DateFormatString = "yyyy-MM-dd"
        };
        string json = JsonConvert.SerializeObject(event, settings);

        // 輸出JSON字符串
        Console.WriteLine(json);
        // 輸出: {"Name":"Conference","Date":"2023-10-15"}

        // 反序列化JSON字符串
        Event deserializedEvent = JsonConvert.DeserializeObject<Event>(json, settings);

        // 輸出對象的屬性
        Console.WriteLine($"Name: {deserializedEvent.Name}, Date: {deserializedEvent.Date}");
        // 輸出: Name: Conference, Date: 10/15/2023 12:00:00 AM
    }
}

9. 處理循環(huán)引用

當對象之間存在循環(huán)引用時,可以使用ReferenceLoopHandling來處理。

using Newtonsoft.Json;
using System;

public class Employee
{
    public string Name { get; set; }
    public Employee Manager { get; set; }
}

class Program
{
    static void Main()
    {
        // 創(chuàng)建兩個Employee對象,并形成循環(huán)引用
        Employee employee1 = new Employee { Name = "John" };
        Employee employee2 = new Employee { Name = "Jane", Manager = employee1 };
        employee1.Manager = employee2;

        // 使用ReferenceLoopHandling.Ignore來處理循環(huán)引用
        var settings = new JsonSerializerSettings
        {
            ReferenceLoopHandling = ReferenceLoopHandling.Ignore
        };
        string json = JsonConvert.SerializeObject(employee1, settings);

        // 輸出JSON字符串
        Console.WriteLine(json);
        // 輸出: {"Name":"John","Manager":{"Name":"Jane"}}
    }
}

10. 使用LINQ to JSON

Newtonsoft.Json還提供了LINQ to JSON功能,允許使用LINQ查詢JSON數(shù)據(jù)。

using Newtonsoft.Json.Linq;
using System;

class Program
{
    static void Main()
    {
        // JSON字符串
        string json = "{\"Name\":\"John\",\"Age\":30,\"Address\":{\"City\":\"New York\",\"State\":\"NY\"}}";

        // 解析JSON字符串為JObject
        JObject person = JObject.Parse(json);

        // 使用LINQ查詢JSON數(shù)據(jù)
        string name = (string)person["Name"];
        int age = (int)person["Age"];
        string city = (string)person["Address"]["City"];

        // 輸出查詢結果
        Console.WriteLine($"Name: {name}, Age: {age}, City: {city}");
        // 輸出: Name: John, Age: 30, City: New York
    }
}

總結

Newtonsoft.Json是一個非常強大且靈活的JSON處理庫,提供了豐富的屬性和方法來處理JSON數(shù)據(jù)。通過上述代碼示例和詳細注釋,應該能夠掌握如何使用Newtonsoft.Json進行序列化、反序列化、格式化、處理屬性名稱、忽略屬性、處理空值、自定義序列化、處理日期格式、處理循環(huán)引用以及使用LINQ to JSON等功能。

以上就是C# Newtonsoft.Json庫的常用屬性和方法的詳細內容,更多關于C# Newtonsoft.Json庫使用的資料請關注腳本之家其它相關文章!

相關文章

  • c#中String類型的存儲原理詳解

    c#中String類型的存儲原理詳解

    本文主要介紹了c#中String類型的存儲原理詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-04-04
  • C#中一些你可能沒用過的調試窗口的方法

    C#中一些你可能沒用過的調試窗口的方法

    其他窗口比較常用,就不介紹了,是不是有一些你沒用到的窗口呢?
    2013-05-05
  • Unity虛擬搖桿的實現(xiàn)方法

    Unity虛擬搖桿的實現(xiàn)方法

    這篇文章主要為大家詳細介紹了Unity虛擬搖桿的實現(xiàn)方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • C#實現(xiàn)遠程關閉和重啟計算機的示例代碼

    C#實現(xiàn)遠程關閉和重啟計算機的示例代碼

    這篇文章主要為大家詳細介紹了如何利用C#實現(xiàn)遠程關閉和重啟計算機的功能,文中的示例代碼講解詳細,對我們學習C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下
    2022-12-12
  • C#操作目錄與文件的方法步驟

    C#操作目錄與文件的方法步驟

    本篇文章是對C#操作目錄與文件的方法步驟進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • Unity AssetBundle打包工具示例詳解

    Unity AssetBundle打包工具示例詳解

    這篇文章主要介紹了Unity AssetBundle打包工具,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-10-10
  • WPF實現(xiàn)監(jiān)聽快捷鍵的方式分享

    WPF實現(xiàn)監(jiān)聽快捷鍵的方式分享

    這篇文章主要為大家詳細介紹了WPF實現(xiàn)監(jiān)聽快捷鍵的幾種方式,文中的示例代碼講解詳細,具有一定的借鑒與學習價值,需要的可以了解一下
    2023-03-03
  • 英語單詞state與status的區(qū)別

    英語單詞state與status的區(qū)別

    state傾向于condition,是一種延續(xù)性的狀態(tài)。status常用于描述一個過程中的某階段(phase),類似于C語言中枚舉型變量某一個固定的值,這個值屬于一個已知的集合。這篇文章主要介紹了英語單詞state與status的區(qū)別,需要的朋友可以參考下
    2016-11-11
  • C#實現(xiàn)搶紅包算法的示例代碼

    C#實現(xiàn)搶紅包算法的示例代碼

    很多商家都會使用紅包進行促銷,那么你知道紅包算法是怎么實現(xiàn)的嗎,本文主要介紹了C#實現(xiàn)搶紅包算法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • c# 基于GMap.NET實現(xiàn)電子圍欄功能(WPF版)

    c# 基于GMap.NET實現(xiàn)電子圍欄功能(WPF版)

    這篇文章主要介紹了c# 基于GMap.NET實現(xiàn)電子圍欄功能(WPF版),幫助大家更好的理解和學習使用c#,感興趣的朋友可以了解下
    2021-03-03

最新評論

女性| 嘉义县| 杭锦后旗| 沾化县| 洛阳市| 什邡市| 海淀区| 都安| 繁昌县| 湖北省| 新源县| 瑞金市| 麻江县| 会理县| 宁晋县| 沾化县| 石棉县| 莎车县| 海晏县| 桐梓县| 曲沃县| 哈尔滨市| 宝山区| 樟树市| 满洲里市| 嘉峪关市| 盐亭县| 兴和县| 灵台县| 武陟县| 福海县| 苏尼特左旗| 巫溪县| 四川省| 岚皋县| 介休市| 兰州市| 西林县| 连南| 云南省| 博湖县|