技术频道导航
HTML/CSS
.NET技术
IIS技术
PHP技术
Js/JQuery
Photoshop
Fireworks
服务器技术
操作系统
网站运营

赞助商

分类目录

赞助商

最新文章

搜索

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

作者:admin    时间:2023-6-8 16:51:32    浏览:

JSON(JavaScript 对象表示法)是一种轻量级数据交换格式。它独立于语言,易于理解和自我描述。它被用作 XML 的替代品。

JSON 表示结构化文本格式的对象和存储在键值对中的数据,在C#代码中使用 JSON 的方法有很多种,本文介绍几种常用的方法。

使用 JsonSerializer.Deserialize

在.NET中,System.Text.Json命名空间提供了一个类JsonSerializer,它有两个静态方法,JsonSerializer.SerializeJsonSerializer.DeserializeJsonSerializer.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 并从该对象中提取值。

标签: CSharp  JSON  JSON字符串  
x
  • 站长推荐
/* 左侧显示文章内容目录 */