C#下Newtonsoft.Json的具体使用

2025-08-22 22:50

本文主要是介绍C#下Newtonsoft.Json的具体使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《C#下Newtonsoft.Json的具体使用》Newtonsoft.Json是一个非常流行的C#JSON序列化和反序列化库,它可以方便地将C#对象转换为JSON格式,或者将JSON数据解析为C#对...

Newtonsoft.Json 是一个非常流行的 C# JSON 序列化和反序列化库,它可以方便地将 C# 对象转换为 JSON 格式,或者将 JSON 数据解析为 C# 对象。Newtonsoft.Json 被广泛用于处理 JSON 数据,因其简单、高效且功能强大。

以下是 Newtonsoft.Json 在 C# 中的详细使用教程。

安装 Newtonsoft.Json

在使用 Newtonsoft.Json 之前,你需要安装它。最简单的方式是通过 NuGet:

  1. 打开 Visual Studio。
  2. 在解决方案资源管理器中右键点击项目,然后选择“管理 NuGet 包”。
  3. 搜索 Newtonsoft.Json,然后点击“安装”。

也可以使用以下命令通过 NuGet 控制台安装:

Install-Package Newtonsoft.Json

基本用法

1. 序列化 C# 对象为 JSON

要将 C# 对象转换为 JSON 字符串,可以使用 JsonConvert.SerializeObject() 方法。

using Newtonsoft.Json;

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

var person = new Person
{
    Name = "John",
    Age = 30
};

string json = JsonConvert.SerializeObject(person);
Console.WriteLine(json);

输出:

{"Name":"John","Age":30}

2. 反序列化 JSON 为 C# 对象

要将 JSON 字符串转换为 C# 对象,可以使用 JsonConvert.DeserializeObject<T>() 方法python

string json = "{\"Name\":\"John\",\"Age\":30}";

Person person = JsonConvert.DeserializeObject<Person>(json);
Console.WriteLine(person.Name);  // 输出:John
Console.WriteLine(person.Age);   // 输出:30

高级用法

1. 序列化时格式化 JSON(缩进)

为了提高可读性,可以使用 Formatting.Indented 选项将 JSON 格式化为缩进的样式:

string formattedJson = JsonConvert.SerializeObject(person, Formatting.Indented);
Console.WriteLine(formattedJson);

输出:

{
  "Name": "John",
  "Age": 30
}

2. 处理复杂对象

Newtonsoft.Json 可以处理复杂的对象,例如包含嵌套对象或集合的对象。

public class Address
{
    public string Street { get; set; }
    public string City { get; set; }
}

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public Address Address { get; set; }
}

var person = new Person
{
    Name = "John",
    Age = 30,
    Address = new Address { Street = "123 Main St", City = "New York" }
};

string json = JsonConvert.SerializeObject(person, Formatting.Indented);
Console.WriteLine(json);

输出:

{
  "Name": "John",
  "Age": 30,
  "Address": {
    "Street": "123 Main St",
    "City": "New York"
  }
}

3. 反序列化为动态对象

可以将 JSON 解析为动态对象,允许你在运行时灵活地访问 JSON 数据。

string json = "{\"Name\":\"John\",\"Age\":30}";

dynamic obj = JsonConvert.DeserializeObject<dynamic>(json);
Console.WriteLine(obj.Name);  // 输出:John
Console.WriteLine(obj.Age);   // 输出:30

4. 忽略属性

如果你不希望某些属性被序列化,可以使用 JsonIgnore 特性。

public class Person
{
    public string Name { get; set; }

    [JsonIgnore]
    public int Age { get; set; }
}

var person = new Person
{
    Name = "John",
    Age = 30
};

string json = JsonConvert.SerializeObject(person);
Console.WriteLine(jsonphp);  // 输出:{"Name":"John"}

5. 更改属性名称

可以使用 JsonProperty 特性为属性指定自定义的 JSON 字段名称。

public class Person
{
    [JsonProperty("full_name")]
    public string Name { get; set; }

    android[JsonProperty("years")]
    public int Age { get; set; }
}

var person = new Person
{
    Name = "John",
    Age = 30
};

string json = JsonConvert.SerializeObject(person);
Console.WriteLine(json);  // 输出:{"full_name":"John","years":30}

6. 处理枚举

可以自定义枚举的序列化方式,使其输出字符串,而不是数字。

public enum Gender
{
    Male,
    Female
}

public class Person
{
    public string Name { get; set; }
    public Gender Gender { get; set; }
}

var person = new Person
{
    Name = "John",
    Gender = Gender.Male
};

string json = JsonConvert.SerializeObject(person);
Console.WriteLine(json);  // 输出:{"Name":"John","Gender":0}

string jsonWithStringEnum = JsonConvert.SerializeObject(person, new StringEnumConverter());
Console.WriteLine(jsonWithStringEnum);  // 输python出:{"Name":"John","Gender":"Male"}

配置 JsonSerializerSettings

通过 JsonSerializerSettings,你可以更细粒度地控制 JSON 序列化和反序列化行为。

JsonSerializerSettings settings = new JsonSerializerSettings
{
    NullValueHandling = NullValueHandling.Ignore,
    DefaultValueHandling = DefaultValueHandling.Ignore
};

string json = JsonConvert.SerializeObject(person, settings);
Console.WriteLine(json);

处理自定义对象(自定义序列化与反序列化)

你可以通过实现 JsonConverter 自定义对象的序列化和反序列化行为。

public class CustomPersonConverter : JsonConverter<Person>
{
    public override void WriteJson(JsonWriter writer, Person value, JsonSerializer serializer)
    {
        writer.WriteStartObject();
        writer.WritePropertyName("full_name");
        writer.WriteValue(value.Name);
        writer.WriteEndObject();
python    }

    public override Person ReadJson(JsonReader reader, Type objectType, Person existingValue, bool hasExistingValue, JsonSerializer serializer)
    {
        JObject jo = JObject.Load(reader);
        return new Person { Name = (string)jo["full_name"] };
    }
}

var person = new Person { Name = "John", Age = 30 };
string customJson = JsonConvert.SerializeObject(person, new CustomPersonConverter());
Console.WriteLine(customJson);  // 输出:{"full_name":"John"}

Person customPerson = JsonConvert.DeserializeObject<Person>(customJson, new CustomPersonConverter());
Console.WriteLine(customPerson.Name);  // 输出:John

处理 JSON 数组

你可以将 JSON 数组序列化和反序列化为 C# 集合类型,如 List<T> 或数组。

string jsonArray = "[{\"Name\":\"John\",\"Age\":30},{\"Name\":\"Jane\",\"Age\":25}]";
List<Person> people = JsonConvert.DeserializeObject<List<Person>>(jsonArray);

foreach (var person in people)
{
    Console.WriteLine($"{person.Name}, {person.Age}");
}

总结

Newtonsoft.Json 是 C# 中最常用的 JSON 序列化和反序列化库之一,具有强大的功能和易于使用的 API。它能够处理简单和复杂的对象,支持定制化序列化、反序列化,适用于动态对象以及复杂的数据结构。

到此这篇关于C#下Newtonsoft.Json的具体使用的文章就介绍到这了,更多相关C# Newtonsoft.Json内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)!

这篇关于C#下Newtonsoft.Json的具体使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1155863

相关文章

Java中流式并行操作parallelStream的原理和使用方法

《Java中流式并行操作parallelStream的原理和使用方法》本文详细介绍了Java中的并行流(parallelStream)的原理、正确使用方法以及在实际业务中的应用案例,并指出在使用并行流... 目录Java中流式并行操作parallelStream0. 问题的产生1. 什么是parallelS

Linux join命令的使用及说明

《Linuxjoin命令的使用及说明》`join`命令用于在Linux中按字段将两个文件进行连接,类似于SQL的JOIN,它需要两个文件按用于匹配的字段排序,并且第一个文件的换行符必须是LF,`jo... 目录一. 基本语法二. 数据准备三. 指定文件的连接key四.-a输出指定文件的所有行五.-o指定输出

Linux jq命令的使用解读

《Linuxjq命令的使用解读》jq是一个强大的命令行工具,用于处理JSON数据,它可以用来查看、过滤、修改、格式化JSON数据,通过使用各种选项和过滤器,可以实现复杂的JSON处理任务... 目录一. 简介二. 选项2.1.2.2-c2.3-r2.4-R三. 字段提取3.1 普通字段3.2 数组字段四.

Linux kill正在执行的后台任务 kill进程组使用详解

《Linuxkill正在执行的后台任务kill进程组使用详解》文章介绍了两个脚本的功能和区别,以及执行这些脚本时遇到的进程管理问题,通过查看进程树、使用`kill`命令和`lsof`命令,分析了子... 目录零. 用到的命令一. 待执行的脚本二. 执行含子进程的脚本,并kill2.1 进程查看2.2 遇到的

详解SpringBoot+Ehcache使用示例

《详解SpringBoot+Ehcache使用示例》本文介绍了SpringBoot中配置Ehcache、自定义get/set方式,并实际使用缓存的过程,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录摘要概念内存与磁盘持久化存储:配置灵活性:编码示例引入依赖:配置ehcache.XML文件:配置

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

k8s按需创建PV和使用PVC详解

《k8s按需创建PV和使用PVC详解》Kubernetes中,PV和PVC用于管理持久存储,StorageClass实现动态PV分配,PVC声明存储需求并绑定PV,通过kubectl验证状态,注意回收... 目录1.按需创建 PV(使用 StorageClass)创建 StorageClass2.创建 PV

一文解析C#中的StringSplitOptions枚举

《一文解析C#中的StringSplitOptions枚举》StringSplitOptions是C#中的一个枚举类型,用于控制string.Split()方法分割字符串时的行为,核心作用是处理分割后... 目录C#的StringSplitOptions枚举1.StringSplitOptions枚举的常用

Redis 基本数据类型和使用详解

《Redis基本数据类型和使用详解》String是Redis最基本的数据类型,一个键对应一个值,它的功能十分强大,可以存储字符串、整数、浮点数等多种数据格式,本文给大家介绍Redis基本数据类型和... 目录一、Redis 入门介绍二、Redis 的五大基本数据类型2.1 String 类型2.2 Hash

Redis中Hash从使用过程到原理说明

《Redis中Hash从使用过程到原理说明》RedisHash结构用于存储字段-值对,适合对象数据,支持HSET、HGET等命令,采用ziplist或hashtable编码,通过渐进式rehash优化... 目录一、开篇:Hash就像超市的货架二、Hash的基本使用1. 常用命令示例2. Java操作示例三