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
    评论
C#中,使用Newtonsoft.Json处理日期类型的方法是通过配置JsonSerializerSettings中的DateFormatString属性。可以使用以下代码示例来设置日期格式: ```csharp JsonSerializerSettings settings = new JsonSerializerSettings { DateFormatString = "yyyy-MM-dd HH:mm:ss" }; string json = JsonConvert.SerializeObject(yourObject, settings); ``` 在上面的代码中,我们创建了一个JsonSerializerSettings对象,并将DateFormatString属性设置为所需的日期格式(例如"yyyy-MM-dd HH:mm:ss")。然后,我们可以使用JsonConvert.SerializeObject方法将对象序列化为JSON字符串,同时传递配置的JsonSerializerSettings对象。 请注意,你需要使用Newtonsoft.Json库,该库可以从官方网站下载并添加到你的项目中。确保在项目中包含Newtonsoft.Json.dll文件,并在代码中引用该库。 引用中提到了在SQL Server的CLR中使用Newtonsoft.Json进行比较的示例,这与在C#中处理日期类型的问题无关,请忽略该引用。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [SQLSERVER CLR借助Newtonsoft.JSON实现JSON内容是否相同对比功能](https://download.csdn.net/download/sugerlcc/85402800)[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^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Newtonsoft.Json-for-Unity.Converters:Newtonsoft.Json的常见Unity类型的转换器。 与jilleJrNewtonsoft....](https://download.csdn.net/download/weixin_42112894/18775229)[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^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [C# Newtonsoft.Json类库源码包](https://download.csdn.net/download/weixin_38658471/18584713)[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^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值