使用 System.Text.Json 反序列化匿名对象 .NET

84 篇文章 ¥59.90 ¥99.00
本文详细介绍了如何在.NET平台上利用System.Text.Json库将JSON数据反序列化为匿名对象。通过示例代码展示了如何创建JSON字符串,使用JsonSerializer.Deserialize方法反序列化,以及如何在没有编译时类型信息的情况下安全访问匿名对象的属性。

在 .NET 平台上,System.Text.Json 是一个强大的库,用于处理 JSON 数据。它提供了许多功能,包括将 JSON 数据序列化为对象以及将对象反序列化为 JSON 数据。本文将重点介绍如何使用 System.Text.Json 反序列化匿名对象。

首先,我们需要创建一个包含 JSON 数据的字符串。然后,我们可以使用 System.Text.Json.JsonSerializer 类的 Deserialize 方法将其反序列化为匿名对象。以下是一个示例:

using System;
using System.Text.Json;

class Program
{
   
   
    
C#使用 `System.Text.Json` 对类对象进行序列化与反序列化是一种常见操作,尤其适用于需要将数据以 JSON 格式进行持久化存储或传输的场景。以下将详细介绍如何实现该功能。 ### 序列化类对象JSON 字符串 要将类对象序列化为 JSON 字符串,可以使用 `System.Text.Json` 提供的 `JsonSerializer.Serialize` 方法。假设有一个简单的类 `Person`: ```csharp public class Person { public string Name { get; set; } public int Age { get; set; } } ``` 序列化该类对象的代码如下: ```csharp using System; using System.Text.Json; public class Program { public static void Main() { Person person = new Person { Name = "Alice", Age = 30 }; string jsonString = JsonSerializer.Serialize(person); Console.WriteLine(jsonString); // 输出: {"Name":"Alice","Age":30} } } ``` ### 反序列化 JSON 字符串为类对象 反序列化是将 JSON 字符串转换回类对象的过程。使用 `JsonSerializer.Deserialize` 方法可以实现这一点: ```csharp string jsonString = "{\"Name\":\"Alice\",\"Age\":30}"; Person person = JsonSerializer.Deserialize<Person>(jsonString); Console.WriteLine(person.Name); // 输出: Alice ``` ### 持久化存储序列化后的数据 为了将序列化后的数据持久化存储,可以将其写入文件。以下是如何将 `Person` 对象序列化并保存到文件的示例: ```csharp using System; using System.IO; using System.Text.Json; public class Program { public static void Main() { Person person = new Person { Name = "Alice", Age = 30 }; string jsonString = JsonSerializer.Serialize(person); File.WriteAllText("person.json", jsonString); } } ``` ### 从文件中读取并反序列化数据 从文件中读取 JSON 数据并将其反序列化为类对象的代码如下: ```csharp using System; using System.IO; using System.Text.Json; public class Program { public static void Main() { string jsonString = File.ReadAllText("person.json"); Person person = JsonSerializer.Deserialize<Person>(jsonString); Console.WriteLine(person.Name); // 输出: Alice } } ``` ### 使用选项配置序列化行为 `System.Text.Json` 提供了 `JsonSerializerOptions` 类,允许开发者自定义序列化行为,例如美化输出格式、忽略空值等: ```csharp var options = new JsonSerializerOptions { WriteIndented = true }; string prettyJsonString = JsonSerializer.Serialize(person, options); Console.WriteLine(prettyJsonString); ``` 输出结果为: ```json { "Name": "Alice", "Age": 30 } ``` ### 处理复杂类型 对于更复杂的类型(如嵌套对象、集合等),只需确保类结构与 JSON 数据匹配即可。例如,定义一个包含 `List<Person>` 的类: ```csharp public class People { public List<Person> Individuals { get; set; } } ``` 序列化和反序列化的操作与简单类型类似,无需额外处理。 ### 注意事项 - `System.Text.Json` 在 .NET Core 3.0 及更高版本中可用。 - 如果需要兼容性更强的功能,可以考虑使用 `Newtonsoft.Json`(即 Json.NET)库。 - 在处理大型数据或性能敏感场景时,建议使用 `Utf8JsonWriter` 和 `Utf8JsonReader` 进行高效操作。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值