c# Newtonsoft.Json的一些用法

在C#中操作JSON数据可以使用Json.NET这个第三方开源库,也叫做Newtonsoft.Json。它是一个高性能、灵活和流行的JSON转换库,支持将.NET对象转换为JSON字符串,以及将JSON字符串转换为.NET对象。

Json.NET提供了非常灵活和易于使用的API,支持深度自定义序列化和反序列化,支持处理日期、空值和循环引用等场景,拥有很高的性能和稳定性,是使用C#开发JSON应用的首选库。

在使用Json.NET之前,需要先安装相应的NuGet包。可以通过Visual Studio的NuGet包管理器或者通过Package Manager Console来安装。例如,在Package Manager Console中,可以使用以下命令来安装Json.NET包:

Install-Package Newtonsoft.Json

安装完成后,可以在代码中通过using语句来引用命名空间,例如:

using Newtonsoft.Json;

这样就可以使用Json.NET库中的API来进行对象和JSON数据的转换了。

下面是他的一些常用的示例。
1.将对象转换成JSON字符串

MyClass obj = new MyClass();
string json = JsonConvert.SerializeObject(obj);

2.将JSON字符串转换成.NET对象

string json = "{ 'name': 'Tom', 'age': 30 }";
Person p = JsonConvert.DeserializeObject<Person>(json);

3.将.NET对象转换成JSON格式的文件

MyClass obj = new MyClass();
using (StreamWriter file = File.CreateText(@"c:\path\to\file.json"))
{
    JsonSerializer serializer = new JsonSerializer();
    serializer.Serialize(file, obj);
}

4.从JSON格式的文件中读取数据,转换成.NET对象

using (StreamReader file = File.OpenText(@"c:\path\to\file.json"))
{
    JsonSerializer serializer = new JsonSerializer();
    MyClass obj = (MyClass)serializer.Deserialize(file, typeof(MyClass));
}

5.指定JSON序列化的格式选项

JsonSerializerSettings settings = new JsonSerializerSettings();
settings.Formatting = Formatting.Indented;
string json = JsonConvert.SerializeObject(obj, settings);

备注:
在C#的JSON序列化中,还有其他的枚举可用于控制输出的JSON字符串的格式,常见的枚举包括:

  1. Formatting.None: 不对输出的JSON字符串进行任何格式化,生成的JSON字符串是一个长字符串。

  2. Formatting.Indented:将输出的JSON字符串进行缩进和换行,以使其更易于阅读和理解。

  3. PreserveReferencesHandling.None:在序列化过程中不保留对象之间的引用关系。如果一个对象被多次引用,则每个引用都会被序列化为独立的对象。

  4. PreserveReferencesHandling.Objects:在序列化过程中保留对象之间的引用关系。如果一个对象被多次引用,则每个引用都会被序列化为一个对象,但这些对象都会共享一个标识符。

  5. TypeNameHandling.None:序列化时不序列化对象的类型信息,反序列化时也不重新创建对象的类型信息。

  6. TypeNameHandling.Auto:序列化时自动将对象的类型信息作为JSON属性写入JSON字符串中,反序列化时将根据JSON属性中的类型信息创建对象。

  7. TypeNameHandling.All:序列化时将所有对象的类型信息都作为JSON属性写入JSON字符串,反序列化时也会根据JSON属性中的类型信息创建对象。

这些枚举可以在使用Newtonsoft.Json库进行JSON序列化时进行设置和配置。(没用过,可能会用到,先查出来留着万一以后需要了呢)

6.使用JsonConvert.SerializeObject方法将.NET对象转换成JSON字符串,忽略空值属性

MyClass obj = new MyClass();
string json = JsonConvert.SerializeObject(obj, Formatting.None, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });

在C#的JSON序列化中,NullValueHandling是一个枚举类型,用于控制是否在输出的JSON字符串中包含属性值为null的属性。

常见的NullValueHandling枚举值有:

  1. NullValueHandling.Include: 在JSON对象中包括属性值为null的属性。

  2. NullValueHandling.Ignore: 在JSON对象中忽略属性值为null的属性。

这个枚举类型可以通过设置JsonSerializerSettings.NullValueHandling属性进行配置,例如:

var serializerSettings = new JsonSerializerSettings
{
    NullValueHandling = NullValueHandling.Ignore // 忽略null属性
};

string jsonString = JsonConvert.SerializeObject(myObject, Formatting.Indented, serializerSettings);

这个设置会在进行JSON序列化时忽略掉所有值为null的属性。如果省略了这个设置,那么默认行为是将所有值为null的属性都包含在生成的JSON字符串中。

7.使用JsonProperty属性指定.NET对象属性和JSON属性名称不同的映射关系

public class Person
{
    [JsonProperty("name")]
    public string Name { get; set; }
    [JsonProperty("age")]
    public int Age { get; set; }
}

8.将JSON字符串转换成JObject对象,方便对JSON数据进行动态处理

string json = "{ 'name': 'Tom', 'age': 30 }";
JObject jo = JObject.Parse(json);
string name = (string)jo["name"];
int age = (int)jo["age"];

9.使用JsonTextReader和JsonTextWriter读写JSON数据流

using (TextWriter textWriter = File.CreateText(@"c:\path\to\file.json"))
using (JsonTextWriter writer = new JsonTextWriter(textWriter))
{
    writer.Formatting = Formatting.Indented;
    writer.WriteStartObject();
    writer.WritePropertyName("name");
    writer.WriteValue("Tom");
    writer.WritePropertyName("age");
    writer.WriteValue(30);
    writer.WriteEndObject();
}

using (TextReader textReader = File.OpenText(@"c:\path\to\file.json"))
using (JsonTextReader reader = new JsonTextReader(textReader))
{
    JObject obj = (JObject)JToken.ReadFrom(reader);
    string name = (string)obj["name"];
    int age = (int)obj["age"];
}
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
NewtonSoft.Json是一个用于处理和操作JSON数据的.NET库。它提供了一些类和方法,使我们能够方便地序列化和反序列化JSON数据,以及查询和修改JSON数据。你可以使用JsonConvert类的DeserializeObject方法将JSON字符串反序列化为具体的对象,例如使用JObject类表示JSON对象,然后使用索引访问属性值。此外,NewtonSoft.Json还提供了JsonSerializerSettings类,用于配置序列化和反序列化的行为,比如转换枚举值为字符串表示,指定日期时间的格式等。另外,你还可以使用Linq to JSON查询语法来查询和操作JSON数据,例如使用JObject.Parse方法将JSON字符串解析为JObject对象,然后使用索引或Linq语法获取属性值。123 #### 引用[.reference_title] - *1* *2* [Newtonsoft.Json基本使用](https://blog.csdn.net/m0_47659279/article/details/119870046)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] - *3* [C# Newtonsoft.Json用法](https://blog.csdn.net/qq_38693757/article/details/113728350)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] [ .reference_list ]
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值