前言
记录使用C#进行json序列化和反序列化方法
一、序列化
序列化,即将数据组织成某种形式,存储在变量或文件中,是保存数据的一种方式。
下面以数据的形式存放数据,以字典的形式组织数据,将组织好的数据存放在json文件中。
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文件中的所需数据解析 出来使用。
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
参考资料
- https://learn.microsoft.com/zh-cn/dotnet/standard/serialization/system-text-json/deserialization?pivots=dotnet-8-0