Newtonsoft.Json基本使用

使用强类型进行序列化反序列化

准备一个学生类

public class Student
{public string Name { get; set; }public int Age { get; set; }public Student(string name, int age){Name = name;Age = age;}
}

序列化及反序列化学生对象

Student student = new("张三", 18);
//序列化
string serializeResult = JsonConvert.SerializeObject(student);
Console.WriteLine(serializeResult);
//反序列化
Student student1 = JsonConvert.DeserializeObject<Student>(serializeResult);
Console.WriteLine(student1.Name);
Console.WriteLine(student1.Age);

使用以上方法之所以能对serializeResult字符串进行了反序列化得到一个Student对象,是因为Student类与serializeResult是有对应关系的

使用JObject进行弱类型的反序列化

但是有时从网上获取的json字符串可能层级很多,很复杂,并且没有现成的与之对应的类,那么如何对其进行反序列化呢?我们难道要大费周折去创建一个复杂的类吗,这样显然太麻烦了

幸运的是
Newtonsoft.Json提供了一种能够表示一些json字符串反序列化结果的类JObject

string jsonString = "{\"name\":\"zhangsan\",\"age\":\"17\", \"son\":{\"age\":\"1\"}}";// jsonString转jObject
JObject jObject = JsonConvert.DeserializeObject<JObject>(jsonString);// 获取jObject中的属性值
string name = (string)jObject["name"];
int age = (int)jObject["age"];
int sonAge = (int)jObject["son"]["age"];Console.WriteLine(name);
Console.WriteLine(age);
Console.WriteLine(sonAge);

序列化时将枚举值转成字符串表示

假设有一个People类有一个属性State,State是枚举类型

public class People{public State State{get; set;}
}
public enum State{Healthy,Unhealthy,
}

那么,该对象格式化的结果的将会是这样的:

可以看到枚举值是使用整数来表示的

但是使用整数来表示枚举值,不具备可读性,我们希望Newtonsoft.Json帮我们把People转换成这样的形式
{“State”:“Healthy”}

如何做呢?

只需要在调用SerializeObject方法时传入一个settings
这个settings中需要添加一个转换器StringEnumConverter

People people = new People() { State = State.Healthy };var settings = new JsonSerializerSettings();
settings.Converters.Add(new StringEnumConverter());Console.WriteLine(JsonConvert.SerializeObject(people, settings));

转换器

除了StringEnumConverter外,转换器还有很多种类,可查阅官网

一种常用的转换器是IsoDateTimeConverter,它可以使你自定义DateTime序列化后的格式

例如,如果你需要将日期时间序列化后的格式为类似这样的——“2021/11/11 18:15:32”,那么只需要这样一个IsoDateTimeConverter实例添加进JsonSerializerSettings的Converters属性中即可

new IsoDateTimeConverter()
{DateTimeFormat = "yyyy/MM/dd HH:mm:ss",
}

完整代码演示

using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using System;
using System.Collections.Generic;namespace CSharpTest2
{public enum StateEnum{Healthy,Unhealthy}public class Person{public TimeSpan Time { get; set; } = TimeSpan.FromDays(1);public StateEnum State { get; set; } = StateEnum.Healthy;public DateTime Birthday { get; set; } = DateTime.Now;}class Program{public static void Main(string[] args){Person person = new Person();var settings = new JsonSerializerSettings(){Converters = new List<JsonConverter>(){new StringEnumConverter(),new IsoDateTimeConverter(){DateTimeFormat = "yyyy/MM/dd HH:mm:ss"}}};string seResult = JsonConvert.SerializeObject(person, settings);}}
}

还可以使用自定义的转换器,不过比较复杂(好吧,我承认我不会)

Newtonsoft.Json基本使用相关推荐

  1. Newtonsoft.Json文件错误

    今天,在一个项目中使用signalR,由于项目框架是.net 4.0,所以用signalR1.0版本,signalR使用需要newtonsoft.Json文件,它把原  newtonsoft.Json ...

  2. Newtonsoft.Json.dll 本地调用正常,服务器调用不正常

    Newtonsoft.Json.dll 本地调用正常,服务器调用不正常的问题 请将System.Runtime.Serialization.dll 传到服务器项目bin文件夹中即可 转载于:https ...

  3. Newtonsoft.Json code

    序列化 Product product = new Product(); product.ExpiryDate = new DateTime(2008, 12, 28);JsonSerializer ...

  4. 解决MVC Json序列化的循环引用问题/EF Json序列化循引用问题---Newtonsoft.Json

    1..Net开源Json序列化工具Newtonsoft.Json中提供了解决序列化的循环引用问题: 方式1:指定Json序列化配置为 ReferenceLoopHandling.Ignore 方式2: ...

  5. Newtonsoft.Json 概述

    有时候,在前后台数据交互或者APP与后台交互的时候,我们通常会使用Json进行数据交互,为此会使用到Newtonsoft.Json.dll 这个类库,这个类库非微软官方,但是下载量已经超过了数十万次, ...

  6. Newtonsoft.Json高级用法

    手机端应用讲究速度快,体验好.刚好手头上的一个项目服务端接口有性能问题,需要进行优化.在接口多次修改中,实体添加了很多字段用于中间计算或者存储,然后最终用Newtonsoft.Json进行序列化返回数 ...

  7. 使用Newtonsoft.Json.dll(JSON.NET)动态解析JSON、.net 的json的序列化与反序列化(一)...

    在开发中,我非常喜欢动态语言和匿名对象带来的方便,JSON.NET具有动态序列化和反序列化任意JSON内容的能力,不必将它映射到具体的强类型对象,它可以处理不确定的类型(集合.字典.动态对象和匿名对象 ...

  8. Newtonsoft.Json的简单使用

    2019独角兽企业重金招聘Python工程师标准>>> 什么是Newtonsoft.Json Newtonsoft.Json,一款.NET中开源的Json序列化和反序列化类库. Ne ...

  9. [C#][Newtonsoft.Json] Newtonsoft.Json 序列化时的一些其它用法

    Newtonsoft.Json 序列化时的一些其它用法 在进行序列化时我们一般会选择使用匿名类型 new { },或者添加一个新类(包含想输出的所有字段).但不可避免的会出现以下情形:如属性值隐藏(敏 ...

  10. Newtonsoft.Json(Json.net)的基本用法

    Newtonsoft.Json(Json.net)的基本用法 添加引用: 使用NuGet,命令:install-package Newtonsoft.Json 实体类: public class Bo ...

最新文章

  1. numpy使用[]语法索引二维numpy数组中指定指定行之后所有数据行的数值内容(accessing rows in numpy array after specifc row)
  2. Tomcat问题 无法启动
  3. 在一台Mac上不同平台同时使用多个Git账号
  4. 安卓一键新机_安卓福音!微信终于推出这个功能,再也不用羡慕iPhone
  5. 【html、css、jq】制作一个简洁的音乐播放器
  6. :Windows下RabbitMQ安装及入门
  7. PMP之项目整合管理之变更管理计划
  8. jni c运行java字符串,通过JNI将C ++字符串发送到Java
  9. html怎么显示返回的图片,想要预览文件或是图片,将后端返回的信息转换为前端可以正常显示的格式...
  10. [转]将图片转换为 latex 公式
  11. Nashorn如何在新层面上影响API的发展
  12. java构造器_Java构造器就是这么简单!
  13. java定义list_我的Java Web之路59 - Java中的泛型
  14. 理解 maven 的核心概念
  15. 在线可视化python网站_Python的可视化工具概述
  16. SpringBoot2.1版本的个人应用开发框架 - 集成Druid + MybatisPlus
  17. word更新域后图片错误_你还不知道Word中F1~F12键作用?
  18. 如何查看chrome的版本
  19. java语言特点概述
  20. 兄弟连Linux笔记

热门文章

  1. 云宏大讲坛 | 灵活轻便的云宏CNware虚拟防火墙
  2. 如何将SQL卸载干净
  3. Logit模型拟合实战案例(Biogeme)
  4. OLED12864 液晶屏
  5. linux qq 中文输入法下载,【QQ拼音输入法纯净版和搜狗输入法 For Linux哪个好用】QQ拼音输入法纯净版和搜狗输入法 For Linux对比-ZOL下载...
  6. 使用spring提供的URL多级路径匹配器
  7. emwin 使用外部字库_emWin“移植全字库(GB2312或GBK编码)”
  8. VS C# 中使用番茄助手
  9. 自制固件iOS4.1刷机、解锁教程
  10. 两种方式打开jar文件