C# Json 增删改查

本文介绍了C#中对Json进行读取和写入的方法,包括使用类转换和JObject操作,特别强调了对于中大型文件的处理策略,并提供了DataTable转换为Json的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、前期准备

二、XXX概念

三、XXX案例

1、XXX应用

 2、XXX应用

3、XXX应用

四、XXX应用例程

一、前期准备

引入using:

using MySql.Data.MySqlClient;
using System;
using System.Configuration;
using System.Data;

二、Json概念

Json 特性
      JSON 类似于XML
      JSON 比XML 更小, 更快, 更易解析

Json 语法规则
           数据在键值对中  用 : 分隔
           数据由逗号分隔 ,
           花括号保存对象 {}
           方括号保存数组 [] -- 唯一
            ----  类似dictionary字典用法

            类型对应, 变量名相同

Json文件修改删除:

        建议先将Json读取到类中,在类中进行增删改查,修改完后再重新写入文件中。小编未查询到可以直接对Json文件进行增删改查。

三、Json 读取

前期准备:

{
  "Class": "一年级2班",
  "Students": [
    {
      "Name": "小白",
      "No": 20220533,
      "Sex": false
    },
    {
      "Name": "小冰",
      "No": 20220113,
      "Sex": false
    },
    {
      "Name": "小王",
      "No": 20220526,
      "Sex": true
    }
  ]
}

1、Json读取 -- 类转换 -- 推荐

代码编写:

internal class Program
{
    static void Main(string[] args)
    {
        //Json文件路径
        string path = @"C:\\Users\\Rush\\Desktop\\C#\\Json\\data.json";
        //读取Json
        string jsonText = File.ReadAllText(path);
        //Json转Information类中
        Information information = JsonConvert.DeserializeObject<Information>(jsonText);

        //输出显示
        Console.WriteLine(information.Class); //结果显示: 一年级2班
        foreach (Student student in information.Students)
        {
            //结果显示: 小白 小冰 小王
            Console.WriteLine(student.Name);
            //结果显示: 20220533 20220113 20220526
            Console.WriteLine(student.No);
            //结果显示: False False True
            Console.WriteLine(student.Sex);
        }
    }
}
public class Information
{
    //班级
    public string Class { set; get; }
    //学生信息
    public List<Student> Students { set; get; }
}
public class Student
{
    public string Name { set; get; }
    public long No { set; get; }
    public bool Sex { set; get; }
}

 2、Json读取 -- JObject 转换 -- 不推荐 -- 操作太麻烦

代码编写:

internal class Program
{
    static void Main(string[] args)
    {
        //Json文件路径
        string path = @"C:\\Users\\Rush\\Desktop\\C#\\Json\\data.json";

        try
        {
            //创建文件流
            StreamReader file = File.OpenText(path);
            //场景Json读流
            JsonTextReader reader = new JsonTextReader(file);
            //获取JObject类型文本
            JObject jsonText = (JObject)JToken.ReadFrom(reader);

            //显示班级
            Console.WriteLine(jsonText["Class"]); //结果显示: 一年级2班

            //遍历显示学生
            jsonText["Students"].ToList()
                                  .ForEach(x =>
                                  {
                                      //结果显示: 小白 小冰 小王
                                      Console.WriteLine(x["Name"].ToString());
                                      //结果显示: 20220533 20220113 20220526
                                      Console.WriteLine(x["No"].ToString());
                                      //结果显示 False False False
                                      Console.WriteLine(x["Sex"].ToString());
                                  });
        }
        catch (Exception)
        {
            throw;
        }
    }
}

3、Json读取 -- 中大型文件时使用

代码编写:

internal class Program
{
    static void Main(string[] args)
    {
        //Json文件路径
        string path = @"C:\\Users\\Rush\\Desktop\\C#\\Json\\data.json";

        string jsonText = string.Empty;

        //遍历Json文件所有行
        foreach (string line in File.ReadLines(path))
        {
            //json文件添加
            jsonText += line + "\n";
        }

        Console.WriteLine(jsonText);
        Console.WriteLine("Hello World!");
    }
}

四、Json写入 

1、Json写入 -- 类转换 -- 推荐 

代码编写:

internal class Program
{
    static void Main(string[] args)
    {
        ////Json文件路径
        string path = @"C:\\Users\\Rush\\Desktop\\C#\\Json\\data.json";

        //待写入数据配置
        List<Student> students = new List<Student>()
        {
            new Student(){ Name = "小白",No = 20220333,Sex = false },
            new Student(){ Name = "小冰",No = 20234222,Sex = false },
            new Student(){ Name = "小王",No = 20232211,Sex = true }
        };
        Information information = new Information()
        {
            Class = "一年级2班",
            Students = students
        };
        
        //类序列化并写入
        File.WriteAllText(path, JsonConvert.SerializeObject(information));
    }
}
public class Information
{
    //班级
    public string Class { set; get; }
    //学生信息
    public List<Student> Students { set; get; }
}
public class Student
{
    public string Name { set; get; }
    public long No { set; get; }
    public bool Sex { set; get; }
}

2、Json写入 -- Json拼装(一)

代码编写:

internal class Program
{
    static void Main(string[] args)
    {
        ////Json文件路径
        string path = @"C:\\Users\\Rush\\Desktop\\C#\\Json\\data.json";

        // 创建班级 
        JObject classes = new JObject(new JProperty("Class", "一年级2班"),
                                       new JProperty("student", new JObject(
                                                                   new JProperty("Name", "小白"),
                                                                   new JProperty("No", 20220533),
                                                                   new JProperty("Sex", false)),
                                                                new JObject(
                                                                    new JProperty("Name", "小冰"),
                                                                    new JProperty("No", 20220113),
                                                                    new JProperty("Sex", false)),
                                                                new JObject(
                                                                    new JProperty("Name", "小王"),
                                                                    new JProperty("No", 20220526),
                                                                    new JProperty("Sex", true))
                                                                ));
        //Json转string
        string strSrc = Convert.ToString(classes);

        //写入文件
        File.WriteAllText(path, strSrc, Encoding.UTF8);
    }
} 

3、Json写入 -- Json拼装(二)

代码编写:

internal class Program
{
    static void Main(string[] args)
    {
        ////Json文件路径
        string path = @"C:\\Users\\Rush\\Desktop\\C#\\Json\\data.json";

        // 创建班级 
        JObject classes = new JObject();
        classes.Add("Class", "一年级2班");

        //创建学生
        JObject student_1 = new JObject();
        student_1.Add("Name", "小白");
        student_1.Add("No", 20220533);
        student_1.Add("Sex", false);

        JObject student_2 = new JObject();
        student_2.Add("Name", "小冰");
        student_2.Add("No", 20220113);
        student_2.Add("Sex", false);

        JObject student_3 = new JObject();
        student_3.Add("Name", "小王");
        student_3.Add("No", 20220526);
        student_3.Add("Sex", true);

        JArray students = new JArray();
        students.Add(student_1);
        students.Add(student_2);
        students.Add(student_3);
        //数组添加
        classes.Add("Students", students);

        //Json转string
        string strSrc = Convert.ToString(classes);

        //写入文件
        File.WriteAllText(path, strSrc, Encoding.UTF8);
    }
}

4、Json写入 -- DataTable转换

代码编写:

internal class Program
{
    static void Main(string[] args)
    {
        ////Json文件路径
        string path = @"C:\\Users\\Rush\\Desktop\\C#\\Json\\data.json";

        DataTable dt = new DataTable();
        dt.TableName = "班级";
        dt.Columns.Add("Name");
        dt.Columns.Add("No");
        dt.Columns.Add("Sex");

        dt.Rows.Add("小白", 11111111, false);
        dt.Rows.Add("小冰", 22222222, false);
        dt.Rows.Add("小王", 33333333, true);

        string jsonText = "{\n" +
                          "\"Class\":\"一年级2班\","+
                          "\"student\":" +
                          JsonConvert.SerializeObject(dt)+
                          "\n}"; 

        File.WriteAllText(path, jsonText);
    }
}

如有错误,烦请批评指正

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值