C#处理json

本文介绍如何使用C#语言处理JSON数据,包括解析和生成JSON,提供了两种实现方案:JavaScriptSerializer和JSON.NET库。

一、json

1、json 是一种轻量级的数据交换格式

2、json 包含:对象数组

(1)、JSON值可以为:字符串数值布尔值对象数组

(2)、JSON对象:

  • 用 { } 括起来
  • 键值对,中间用:分开
  • 用逗号分割各个键值对

如: { 名称1 : 值1 , 名称2 : 值2 } 

(3)、 json 的基本格式:对象格式和数组格式,其他的各种都可以为基本格式的组合、嵌套。

// 1、对象格式
{
  "name": "Jeff",
  "age": 18,
  "地址": "上海"
}

// 2、数组格式
[
  { "name01": "Hello" },
  { "name02": "Karl" },
  {"name03": "Kity"}
]

【注意】:使用数组时,每个元素的类型都相同。否则可以使用对象

3、JSON 字符串的序列化反序列化

(1)、序列化:即将指定的对象转换成JSON字符串。其目的是为了传输信息、用来写入JSON字符串。此时是为了计算机进行操作。

(2)、反序列化:即将JSON 转换成指定的.NET类型(如类、结构体)。其目的的是打印及显示JSON 字符串,用于读取JSON文件。


二、使用C#解析JSON

1、方案一:使用 JavaScriptSerializer

(1)、添加 JavaScriptSerializer 到项目中,右键点击该项目下的 ”引用“,然后分别选择如下内容:

              

(2)、然后在项目的开头添加:using System.Web.Script.Serialization;    才可以使用 JavaScriptSerializer 来对 json 字符串进行反序列化操作。同时使用了 IO,所以也需要 using System.IO;

(3)、json文件

   

(4)、对应代码 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.Script.Serialization;
using System.IO;

namespace TheJson
{
    /// <summary>
    /// 该Person类只是一个普通的演示类
    /// </summary>
    class Person
    {
        public string name;
        public int age;

        // 一个用于重写的字符串,以便在控制台上展示最后的结果
        public override string ToString()
        {
            return string.Format("Name:{0},\nAge:{1}", name, age);
        }
    }
    class Program
    {
       
    static void Main(string[] args)
        {
            string path1 = @"D:\Temp\UnityTxtWriteLoad\JSON.json";

            // 将path1中的json文件读取,并放入数据流中(字符串)
            string JSONstring = File.ReadAllText(path1);

            //实例化一个JavaScriptSerializer 的例子
            JavaScriptSerializer ser = new JavaScriptSerializer();

            // 反序列化:将指定的JSONstring字符串,转换成Person类型的对象
            Person p1 = ser.Deserialize<Person>(JSONstring);

            Console.WriteLine(p1);

            Console.ReadKey();

        }
    }
}

(5)、解析结果

 

 

2、方案二:使用 JSON.NET

(1)、为了使用 json.net 库,需要添加如下

   

(2)、在代码的头文件中引用:using Newtonsoft.Json;  以便对json文件进行处理。

由于还需要使用File类,所以还需要引用:using System.IO;

(3)、json 文件 

   

(4)、对应代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
using System.IO;

namespace TheJson
{
    /// <summary>
    /// 该Person类只是一个普通的演示类
    /// </summary>
    class Person
    {
        public string name;
        public int age;
        public string gender;
    }
    class Program
    {
       
    static void Main(string[] args)
        {
            string path1 = @"D:\Temp\UnityTxtWriteLoad\JSON.json";

            // 直接从指定文件中反序列化JSON
            string JSONstring = File.ReadAllText(path1);
            Person p1 = JsonConvert.DeserializeObject<Person>(JSONstring);

            Console.WriteLine("姓名:{0},\n性别:{1},\n年龄:{2}",p1.name,p1.gender,p1.age);

            Console.ReadKey();

        }
    }
}

(5)、解析结果

  


三、使用C#生成JSON

在上面的步骤中,已经将操作 JSON 使用的两种方式,所对应库文件都安装好了。接下来同样使用这两种方式来进行生成 JSON 字符串。

1、方案一:使用 JavaScriptSerializer

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.Script.Serialization; // 包含该引用
using System.IO;

namespace TheJson
{
    /// <summary>
    /// 该Person类只是一个普通的演示类
    /// </summary>
    class Person
    {
        public string name;
        public int age;
        public override string ToString()
        {
            return string.Format("Name:{0},\nAge:{1}", name, age);
        }
    }
    class Program
    {
       
    static void Main(string[] args)
        {
            string path2 = @"D:\Temp\UnityTxtWriteLoad\Output.json";

            // 实例化一个JavaScriptSerializer类的对象,通过该对象来对JSON进行序列化和反序列化操作
            JavaScriptSerializer ser = new JavaScriptSerializer();
            // 实例化一个Person类
            Person p2 = new Person() { name = "Jeff", age = 18 };
            // 通过JavaScriptSerializer类的对象进行序列化操作
            string outputJSON = ser.Serialize(p2);
            // 将JSON字符串写入到指定的文件中
            File.WriteAllText(path2, outputJSON);

        }
    }
}

 

 

2、方案二:使用 JSON.NET

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json; // 包含该引用
using System.IO;

namespace TheJson
{
    /// <summary>
    /// 该Person类只是一个普通的演示类
    /// </summary>
    class Person
    {
        public string name;
        public int age;
        public override string ToString()
        {
            return string.Format("Name:{0},\nAge:{1}", name, age);
        }
    }
    class Program
    {
       
    static void Main(string[] args)
        {
            string path2 = @"D:\Temp\UnityTxtWriteLoad\Output.json";

            Person p3 = new Person() { name = "Kity", age = 25 };
            // 将指定的对象序列化成JSON 字符串
            string outputJSON = JsonConvert.SerializeObject(p3);
            // 将JSON字符串写入到指定的文件中
            File.WriteAllText(path2, outputJSON);

        }
    }
}

  


四、应用实例:JSON应用程序数据存储

1、基本要求:

  • 启动时从JSON 文件读取应用程序数据
  • 通过控制台输入编辑数据
  • 退出时编辑JSON 数据文件

2、实例代码

 

 

 

 

 

 

 

 

<think>首先,用户的问题是关于C#处理JSON数据的方法和示例。我需要基于系统级指令来构建我的回答。系统级指令要点:-所有行内数学表达式必须使用$...$格式。-独立公式必须使用$$...$$格式并单独成段。-LaTeX语法正确。-使用中文回答。-生成相关问题。-在回答中引用的段落末尾自然地添加引用标识,例如[^1]。-回答结构清晰,帮助用户逐步解决问题。-参考站内引用:引用[1]、[2]、[3]提供了关于C#处理JSON的示例代码。用户的问题:我想使用C#处理JSON数据的方法或技术请问C#处理JSON数据的方法和示例我的回答需要:1.使用中文。2.结构清晰:逐步解释C#处理JSON的方法。3.包括示例代码:从引用中提取或创建相关示例。4.添加引用标识:在引用站内内容时添加[^1]、[^2]、[^3]。5.生成相关问题:在结尾部分添加相关问题。分析站内引用:-引用[1]:使用JsonConvert.SerializeObject将C#对象序列化为JSON字符串。-引用[2]:使用JsonConvert.DeserializeObject将JSON字符串反序列化为C#对象。-引用[3]:使用JArray处理JSON数组。这些引用来自Newtonsoft.Json库(也称为Json.NET),这是C#处理JSON的流行库。回答结构:-**引言**:简要介绍C#处理JSON的常用方法。-**步骤1:序列化**:将C#对象转换为JSON字符串,使用引用[1]的示例。-**步骤2:反序列化**:将JSON字符串转换为C#对象,使用引用[2]的示例。-**步骤3:使用JArray处理数组**:基于引用[3]的示例。-**其他方法**:简要提及其他库或内置方法(如System.Text.Json)。-**总结**:强调最佳实践。-**相关问题**:生成3-5个相关问题。确保LaTeX:用户的问题不涉及数学表达式,但如果有需要,我会遵守指令。这里主要是代码示例,所以可能不需要数学LaTeX。引用标识:-当使用引用中的内容时,在末尾添加[^1]、[^2]、[^3]。最终输出:-以用户可见层开始。-回答主体。-§§相关问题§§部分。相关问题生成:-基于主题,如性能优化、错误处理、库比较等。完整回答框架:1.**介绍**:C#处理JSON通常使用Newtonsoft.Json库,现在也有System.Text.Json。2.**序列化示例**:展示如何序列化对象到JSON。3.**反序列化示例**:展示如何反序列化JSON到对象。4.**处理数组**:展示JArray的使用。5.**代码示例**:包括代码块。6.**相关问题**:如“如何优化JSON序列化性能?”、“如何处理嵌套JSON?”等。</think>### C# 处理 JSON 数据的方法和示例 在 C#处理 JSON 数据是常见的需求,主要用于数据序列化(将对象转换为 JSON 字符串)和反序列化(将 JSON 字符串转换为对象)。Newtonsoft.Json(也称为 Json.NET)是最常用的库,它功能强大且易于使用。此外,C# 从 .NET Core 3.0 开始引入了内置的 `System.Text.Json` 库,它更轻量级且性能更好。下面我将逐步介绍核心方法和示例代码,确保结构清晰易懂。所有代码示例基于 Newtonsoft.Json,因为它在实际项目中应用广泛[^1][^2][^3]。 #### 步骤 1: 安装 Newtonsoft.Json 库 在开始前,需通过 NuGet 安装 Newtonsoft.Json: - 在 Visual Studio 中:打开 NuGet 包管理器,搜索 "Newtonsoft.Json" 并安装。 - 使用 .NET CLI:运行命令 `dotnet add package Newtonsoft.Json`。 #### 步骤 2: JSON 序列化(对象转 JSON 字符串) 序列化是将 C# 对象转换为 JSON 字符串的过程。使用 `JsonConvert.SerializeObject` 方法,它支持自定义格式化(如缩进)。以下是一个完整示例,基于引用[^1]: ```csharp using Newtonsoft.Json; // 定义数据模型类 public class Person { public string Name { get; set; } public int Age { get; set; } public bool IsStudent { get; set; } } // 序列化示例 Person person = new Person { Name = "John", Age = 30, IsStudent = false }; string json = JsonConvert.SerializeObject(person); Console.WriteLine(json); // 输出: {"Name":"John","Age":30,"IsStudent":false} ``` - **解释**:这里创建了一个 `Person` 对象,并序列化为 JSON 字符串。输出是紧凑格式的 JSON。如果需要美化输出(带缩进),可以添加参数:`JsonConvert.SerializeObject(person, Formatting.Indented)`[^1]。 #### 步骤 3: JSON 反序列化(JSON 字符串转对象) 反序列化是将 JSON 字符串还原为 C# 对象。使用 `JsonConvert.DeserializeObject<T>` 方法,其中 `T` 是目标类型。参考引用[^2],这是一个通用方法: ```csharp using Newtonsoft.Json; // 反序列化示例 public T JsonDeserialize<T>(string jsonString) { return JsonConvert.DeserializeObject<T>(jsonString); } // 使用示例 string jsonInput = "{\"Name\":\"Alice\",\"Age\":25,\"IsStudent\":true}"; Person deserializedPerson = JsonDeserialize<Person>(jsonInput); Console.WriteLine($"Name: {deserializedPerson.Name}, Age: {deserializedPerson.Age}"); // 输出: Name: Alice, Age: 25 ``` - **解释**:该方法将 JSON 字符串解析为 `Person` 对象。反序列化时需确保 JSON 结构与类属性匹配,否则会抛出异常[^2]。 #### 步骤 4: 处理 JSON 数组 对于数组或列表数据,Newtonsoft.Json 提供了 `JArray` 类来动态操作 JSON 数组。基于引用[^3],示例代码如下: ```csharp using Newtonsoft.Json.Linq; using System.Collections.Generic; // 创建字符串列表并转换为 JArray List<string> stringList = new List<string> { "s1", "s2" }; JArray listArr = new JArray(stringList); Console.WriteLine(listArr.ToString()); // 输出: ["s1","s2"] // 解析 JSON 数组字符串 string jsonArray = "[\"item1\", \"item2\", \"item3\"]"; JArray parsedArray = JArray.Parse(jsonArray); foreach (var item in parsedArray) { Console.WriteLine(item); // 输出: item1, item2, item3 } ``` - **解释**:`JArray` 允许动态访问和修改 JSON 数组元素,适用于复杂或不固定结构的 JSON 数据[^3]。 #### 其他方法和注意事项 - **使用 System.Text.Json(内置库)**:如果你使用 .NET Core 3.0 或更高版本,可以考虑 `System.Text.Json`。它更高效,但功能较少。示例: ```csharp using System.Text.Json; var json = JsonSerializer.Serialize(person); var obj = JsonSerializer.Deserialize<Person>(json); ``` - **错误处理**:在反序列化时,使用 `try-catch` 块处理无效 JSON: ```csharp try { var obj = JsonConvert.DeserializeObject<Person>(jsonString); } catch (JsonException ex) { Console.WriteLine($"解析错误: {ex.Message}"); } ``` - **性能优化**:对于大数据量,使用 `JsonSerializerSettings` 配置选项(如忽略空值)。 #### 总结 C# 处理 JSON 的核心方法是序列化和反序列化,Newtonsoft.Json 是首选库,支持灵活的数据操作。内置的 `System.Text.Json` 适合高性能场景。实践中,确保数据模型与 JSON 结构一致以避免错误[^1][^2][^3]。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值