技術頻道導航
HTML/CSS
.NET技術
IIS技術
PHP技術
Js/JQuery
Photoshop
Fireworks
服務器技術
操作系統(tǒng)
網站運營

贊助商

分類目錄

贊助商

最新文章

搜索

4種易用方法C#解析JSON字符串【示例】

作者:admin    時間:2023-6-8 16:51:32    瀏覽:

JSON(JavaScript 對象表示法)是一種輕量級數(shù)據(jù)交換格式。它獨立于語言,易于理解和自我描述。它被用作 XML 的替代品。

JSON 表示結構化文本格式的對象和存儲在鍵值對中的數(shù)據(jù),在C#代碼中使用 JSON 的方法有很多種,本文介紹幾種常用的方法。

使用 JsonSerializer.Deserialize

在.NET中,System.Text.Json命名空間提供了一個類JsonSerializer,它有兩個靜態(tài)方法,JsonSerializer.SerializeJsonSerializer.Deserialize。JsonSerializer.Deserialize 方法用于將 JSON 字符串解析為對象并讀取其成員值。

下面是一個用于創(chuàng)建 JSON 數(shù)據(jù)的 C# 對象示例。

public class CSharpMember
{
    public string Name { get; set; }
    public string Bio { get; set; }
    public DateTime JoinDate { get; set; }
    public bool Author { get; set; }
}

為上述對象創(chuàng)建的 JSON 字符串如下所示。

// 獲得JSON字符串
string jsonMemberString = "{\"Name\":\"Mahesh Chand\",\"Bio\":\"Software developer\"," +
    "\"JoinDate\":\"2000-01-01T00:00:00-00:00\",\"Author\":true}";

你可以調用 JsonSerializer.Deserialize 方法將字符串反序列化為對象。

// 將JSON字符串反序列化為對象
CSharpMember member = JsonSerializer.Deserialize<CSharpMember>(jsonMemberString);

一旦 JSON 字符串被反序列化為一個對象,現(xiàn)在就可以很容易地通過對象成員讀取它的值。

// 使用對象成員讀取/解析數(shù)據(jù)
Console.WriteLine($"Name: {member.Name}");
Console.WriteLine($"Bio: {member.Bio}");
Console.WriteLine($"JoinDate: {member.JoinDate}");
Console.WriteLine($"Author: {member.Author}");

該程序的輸出如下所示:

Deserialize JSON string
Name: Mahesh Chand
Bio: Software developer
JoinDate: 12/31/1999 7:00:00 PM
Author: True

使用 JsonConverter

Newtonsoft 也稱為 Json.NET。它是 .NET 的高性能 JSON 框架。它非常易于使用,并且比 .NET 的內置 JSON 序列化快得多。

JsonConvert 類有一個與 JSON 字符串相互轉換的方法,分別是 SerializeObject()DeserializeObject()。它可以用在我們不想與 JSON 字符串相互轉換的地方。

在下面的示例中,我使用“JsonConvert.DeserializeObject”方法將我的 JSONobject 轉換為我的自定義類對象。這里的 JSON 鍵名必須與類屬性名匹配,并且匹配不區(qū)分大小寫。

static void Main(string[] args)
{
    stringjsonData = @ "{
    'FirstName': 'Jignesh', 'LastName': 'Trivedi'
}
";
var myDetails = JsonConvert.DeserializeObject < MyDetail > (jsonData);
Console.WriteLine(string.Concat("Hi ", myDetails.FirstName, " " + myDetails.LastName));
Console.ReadLine();
}
public class MyDetail
{
    public string FirstName {
        get;
        set;
    }
    public string LastName {
        get;
        set;
    }
}

使用 JObject.Parse

JObject類有Parse方法;它解析 JSON 字符串并將其轉換為鍵值字典對象。在下面的示例中,我使用了“JObject.Parse”方法并使用鍵檢索數(shù)據(jù)。

string jsonData = @"{
'FirstName':'Jignesh',
'LastName':'Trivedi'
}";

var details = JObject.Parse(jsonData);
Console.WriteLine(string.Concat("Hi ", details["FirstName"], " " + details["LastName"]));

Console.ReadLine();

在下面的代碼片段中,我們只是將 JObject.Parse 方法輸出分配給動態(tài)對象并將訪問值作為動態(tài)對象的屬性。

string jsonData = @"{
'FirstName':'Jignesh',
'LastName':'Trivedi'
}";
dynamic data = JObject.Parse(jsonData);

Console.WriteLine(string.Concat("Hi ", data.FirstName, " " + data.LastName));
Console.ReadLine();

注意

上述方法中的屬性名或鍵名是區(qū)分大小寫的;即類的屬性名稱必須匹配 JSON 數(shù)據(jù)的鍵。

使用數(shù)據(jù)協(xié)定 Json 序列化程序類

.NET 框架還提供了用于對 JSON 進行序列化和反序列化的類。其中之一是 DataContractJsonSerializer。使用以下代碼,我們可以反序列化 JSON 對象。要使用此方法,必須記住以下幾點,

  • 該項目必須具有引用 System.Runtime.Serialization
  • 該類必須用 DataContract 修飾,屬性必須用 DataMember 屬性修飾
  • 使用 WriteObject 方法序列化對象,使用 ReadObject 方法反序列化 JSON 對象。
static void Main(string[] args)
{
    string jsonData = "{ \"WebName\":\"卡卡網\",\"WebSite\":\"webkaka.com\" }";
    DataContractJsonSerializerjsonSerializer = newDataContractJsonSerializer(typeof(MyDetail));
    MemoryStream stream = newMemoryStream(Encoding.UTF8.GetBytes(jsonData));
    stream.Position = 0;
    MyDetaildataContractDetail = (MyDetail) jsonSerializer.ReadObject(stream);
    Console.WriteLine(string.Concat("Hi ", dataContractDetail.WebName, " " + dataContractDetail.WebSite));
    Console.ReadLine();
}
[DataContract]
public class MyDetail
{
    [DataMember]
    public string WebName {
        get;
        set;
    }
    [DataMember]
    public string WebSite {
        get;
        set;
    }
}

輸出

Hi 卡卡網 webkaka.com

總結

使用上述方法,我們可以在 C# 代碼中解析 JSON 并從該對象中提取值。

標簽: CSharp  JSON  JSON字符串  
x
  • 站長推薦
/* 左側顯示文章內容目錄 */