4种易用方法C#解析JSON字符串【示例】
作者:admin 时间:2023-6-8 16:51:32 浏览:JSON(JavaScript 对象表示法)是一种轻量级数据交换格式。它独立于语言,易于理解和自我描述。它被用作 XML 的替代品。
JSON 表示结构化文本格式的对象和存储在键值对中的数据,在C#代码中使用 JSON 的方法有很多种,本文介绍几种常用的方法。
使用 JsonSerializer.Deserialize
在.NET中,System.Text.Json
命名空间提供了一个类JsonSerializer
,它有两个静态方法,JsonSerializer.Serialize
和JsonSerializer.Deserialize
。JsonSerializer.Deserialize
方法用于将 JSON 字符串解析为对象并读取其成员值。
下面是一个用于创建 JSON 数据的 C# 对象示例。
public class CSharpMember
{
public string Name { get; set; }
public string Bio { get; set; }
public DateTime JoinDate { get; set; }
public bool Author { get; set; }
}
为上述对象创建的 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 字符串被反序列化为一个对象,现在就可以很容易地通过对象成员读取它的值。
// 使用对象成员读取/解析数据
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 键名必须与类属性名匹配,并且匹配不区分大小写。
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
”方法并使用键检索数据。
string jsonData = @"{
'FirstName':'Jignesh',
'LastName':'Trivedi'
}";
var details = JObject.Parse(jsonData);
Console.WriteLine(string.Concat("Hi ", details["FirstName"], " " + details["LastName"]));
Console.ReadLine();
在下面的代码片段中,我们只是将 JObject.Parse
方法输出分配给动态对象并将访问值作为动态对象的属性。
string jsonData = @"{
'FirstName':'Jignesh',
'LastName':'Trivedi'
}";
dynamic data = JObject.Parse(jsonData);
Console.WriteLine(string.Concat("Hi ", data.FirstName, " " + data.LastName));
Console.ReadLine();
注意
上述方法中的属性名或键名是区分大小写的;即类的属性名称必须匹配 JSON 数据的键。
使用数据协定 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 并从该对象中提取值。
- 站长推荐