C# 对象与JSON串互相转换

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;

namespace CrjIIOfflineAccept.CrjIITools
{
public class JsonTools
{
// 从一个对象信息生成Json串
public static string ObjectToJson(object obj)
{
DataContractJsonSerializer serializer
=
new DataContractJsonSerializer(obj.GetType());
MemoryStream stream
= new MemoryStream();
serializer.WriteObject(stream, obj);
byte[] dataBytes = new byte[stream.Length];
stream.Position
= 0;
stream.Read(dataBytes,
0, (int)stream.Length);
return Encoding.UTF8.GetString(dataBytes);
}
// 从一个Json串生成对象信息
public static object JsonToObject(string jsonString, object obj)
{
DataContractJsonSerializer serializer
=
new DataContractJsonSerializer(obj.GetType());
MemoryStream mStream
= new MemoryStream(Encoding.UTF8.GetBytes(jsonString));
return serializer.ReadObject(mStream);
}
}
}
C# 中,对象 JSON互相转换是一个非常常见的需求,尤其是在开发 Web API 或处理数据传输时。最常用的库是 **`System.Text.Json`**(.NET Core 3.0+ 推荐)和 **`Newtonsoft.Json`**(又称 Json.NET,功能更强大、使用广泛)。 下面我将分别演示使用这两种方式实现 C# 对象 JSON 字符的互。 --- ### ✅ 使用 `System.Text.Json`(推荐,原生支持) ```csharp using System; using System.Text.Json; // 定义一个示例类 public class Person { public string Name { get; set; } public int Age { get; set; } public string Email { get; set; } } class Program { static void Main() { // 1. 对象 JSON 字符 var person = new Person { Name = "张三", Age = 25, Email = "zhangsan@example.com" }; string jsonString = JsonSerializer.Serialize(person); Console.WriteLine("对象JSON:"); Console.WriteLine(jsonString); // 2. JSON 字符 对象 string jsonInput = @"{""Name"":""李四"",""Age"":30,""Email"":""lisi@example.com""}"; Person deserializedPerson = JsonSerializer.Deserialize<Person>(jsonInput); Console.WriteLine("\nJSON对象:"); Console.WriteLine($"姓名: {deserializedPerson.Name}, 年龄: {deserializedPerson.Age}, 邮箱: {deserializedPerson.Email}"); } } ``` #### 🔍 解释: - `JsonSerializer.Serialize(obj)`:将 C# 对象序列化为 JSON 字符。 - `JsonSerializer.Deserialize<T>(jsonString)`:将 JSON 字符反序列化为指定类型的对象。 - 支持 public 属性的自动映射(字段需为 public)。 - 默认区分大小写,可通过选项配置。 > ⚠️ 注意:`System.Text.Json` 在 .NET Core 3.0+ 可用;.NET Framework 需要额外安装包。 --- ### ✅ 使用 `Newtonsoft.Json`(第三方,兼容性好) 首先通过 NuGet 安装: ```bash Install-Package Newtonsoft.Json ``` 代码示例: ```csharp using System; using Newtonsoft.Json; public class Person { public string Name { get; set; } public int Age { get; set; } public string Email { get; set; } } class Program { static void Main() { // 1. 对象 JSON var person = new Person { Name = "王五", Age = 35, Email = "wangwu@example.com" }; string jsonString = JsonConvert.SerializeObject(person); Console.WriteLine("对象JSON:"); Console.WriteLine(jsonString); // 2. JSON 对象 string jsonInput = @"{""Name"":""赵六"",""Age"":28,""Email"":""zhaoliu@example.com""}"; Person deserializedPerson = JsonConvert.DeserializeObject<Person>(jsonInput); Console.WriteLine("\nJSON对象:"); Console.WriteLine($"姓名: {deserializedPerson.Name}, 年龄: {deserializedPerson.Age}, 邮箱: {deserializedPerson.Email}"); } } ``` #### 🔍 解释: - `JsonConvert.SerializeObject()` 和 `DeserializeObject<T>()` 是 Newtonsoft 提供的核心方法。 - 功能更丰富:支持私有字段、自定义属性名、日期格式化、循环引用等高级特性。 - 更适合复杂场景或需要兼容旧项目的情况。 --- ### 🛠️ 常见配置选项(以 `System.Text.Json` 为例) ```csharp var options = new JsonSerializerOptions { WriteIndented = true, // 格式化输出(带缩进) PropertyNamingPolicy = null // 保持 PascalCase(默认),设为 JsonNamingPolicy.CamelCase 则 camelCase }; string jsonString = JsonSerializer.Serialize(person, options); ``` 对于 `Newtonsoft.Json`: ```csharp var settings = new JsonSerializerSettings { Formatting = Formatting.Indented, NullValueHandling = NullValueHandling.Ignore }; string jsonString = JsonConvert.SerializeObject(person, settings); ``` --- ### ✅ 总结对比 | 特性 | `System.Text.Json` | `Newtonsoft.Json` | |------|--------------------|-------------------| | 是否内置 | ✅ 是(.NET Core 3+) | ❌ 否(需 NuGet) | | 性能 | 更快,内存更优 | 稍慢 | | 功能丰富度 | 基础够用 | 极其丰富(如 `[JsonProperty]`) | | 兼容性 | 不支持 .NET Framework | 支持所有版本 | | 推荐用途 | 新项目首选 | 老项目/复杂需求 | ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值