C#的JSON序列化与反序列化

前言

记录使用C#进行json序列化和反序列化方法

一、序列化

序列化,即将数据组织成某种形式,存储在变量或文件中,是保存数据的一种方式。

下面以数据的形式存放数据,以字典的形式组织数据,将组织好的数据存放在json文件中。

csharp 复制代码
using System.Collections.Generic;
uusing Newtonsoft.Json;

namespace MyConsoleAppTest
{
	class Program
	{
		private bool SaveJsonFile()
		{
			// 建立数据
			float[] lons = new float[4]{102.1f, 102.2f, 102.3f, 102.4f};
			float[] lats = new float[4]{34.1f, 34.2f, 34.3f, 34.4f};
			int[] values = new int[4]{1, 2, 3, 4};
			string[] levels = new string[4]{"1", "2", "3", "4"};
			Dictionary<string, object> dicValues = new Dictionary<string, object>();
			dicValues.Add("lon", lons);
			dicValues.Add("lat", lats);
			dicValues.Add("value", values);
			dicValues.Add("level", levels);
			// 序列化
			string result = JsonConvert.SerializeObject(dicValues);
			//存储,位置可以自行设置
			using(System.IO.StreamWriter sw = new System.IO.StreamWriter(@"E:\..\..\example.json"));
			{
				sw.Write(result);
				sw.close();
			}
			return true;
		}
		static void Main(string[] args)
		{
			Program p = new Program();
			p.SaveJsonFile();
		}
	}
}

运行程序,输出结果使用VScode打开所保存目录下的json文件,内容如下图所示。

二、反序列化

反序列化是序列化的反过程,将JSON文件中的所需数据解析 出来使用。

csharp 复制代码
using System.Collections.Generic;
uusing Newtonsoft.Json;

namespace MyConsoleAppTest
{
	class Program
	{
		private bool ReadJsonFile()
		{
			// 读取文件
			string jsonContent = string.Empty;
			using(System.IO.StreamReader sr = new System.IO.StreamReader(@"E:\..\..\example.json"))
			{
				jsonContent = sr.ReadToEnd();
			}
			// 反序列化
			var resultArr = JsonConvert.DeserializeObject<MyClass>(jsoncontent);
			
			return true;
		}
		static void Main(string[] args)
		{
			Program p = new Program();
			p.ReadJsonFile();
		}
	}
	public class MyClass
	{
		public float[] lon {set; get;}
		public float[] lat {set; get;}
		public float[] value {set; get;}
		public float[] level {set; get;}
	}
}

注意:代码中的value字段需要重新命名,和系统变量是应该重名了。

反序列化和序列化皆可使用类来定义字段。

END
参考资料
相关推荐
凯丨6 小时前
AI 蠕虫来了:恶意文档如何通过 Copilot for Word 自我传播?
人工智能·c#·copilot
Aaron - Wistron7 小时前
Web API C# (Furion版)带 单元测试
开发语言·后端·c#
骊城英雄9 小时前
基于C#+avalonia ui实现的跨平台点胶机灌胶监控控制上位机软件
开发语言·ui·c#
吾儿良辰9 小时前
一个被BCL遗忘的高性能集合:C# CircularBuffer<T>深度解析
开发语言·windows·c#
哎呦喂我去去去9 小时前
C#实现屏幕墙:同时监控多个电脑桌面(支持Windows、信创Linux、银河麒麟、统信UOS)
linux·windows·c#
caishenzhibiao10 小时前
期货先行者主图 同花顺期货通指标
java·c语言·c#
库拉库拉里10 小时前
Word文档的标题总是自动出现首行缩进怎么办?
c#·word·xhtml
在世修行10 小时前
从零打造 C# 工业视觉检测系统(一):项目全景与架构设计
c#·视觉检测
牡丹雅忻112 小时前
AES 加密模式演进:从 ECB、CBC 到 GCM 的 C# 深度实践
java·开发语言·c#
脚踏实地皮皮晨12 小时前
002002002_DepandencyObject类2
开发语言·windows·算法·c#·visual studio