常用的类库有:
JSON.NET,System.Text.Json,DataContractJsonSerializer,JavaScriptSerializer
1、JSON.NET
Json.Net是.net framework 使用的比较频繁的Json序列化组件,Json.Net已经支持.net core,最新版本已经到v13版;
使用Json.NET类库需要引入的命名空间 using Newtonsoft.Json并需要下载nuget包。使用具体如下
//引用using Newtonsoft.Json;
//公共的对象TestModel
public class TestModel
{
public string UserName { get; set; }
public string Sex { get; set; }
public string Age { get; set; }
}
//main方法
public static void Main()
{
TestModel model = new TestModel();
model.UserName = "张山";
model.Sex = "男";
model.Age = 25;
//序列化
var stustrjson = JsonConvert.SerializeObject(model);
//反序列化
var fanstustr2= JsonConvert.DeserializeObject<TestModel>(stustrjson);
string strContent1 = "对象序列化:" + strJson + "\n" +
"反序列化值:" + models.Age + " " + models.Sex + " " + models.UserName;
Console.WriteLine(strContent1);
//对象 → 字符串
JObject obj = JObject.FromObject(model);
string Jstr = ConvertJsonString(obj.ToString()); //格式化Json字符串
//字符串 → 对象
TestModel tm = JsonConvert.DeserializeObject<TestModel>(str);
}
2、System.Text.Json
微软在.NET Core 3.0 提供了一个名为System.Text.Json的全新命名空间,使用时需要引入的命名空间System.Text.Json,相比Json.Net据说性能提高不少。
如果是在.NET Core 3.0 以上版本建议使用。具体使用如下
//引用using System.Text.Json;
//公共的对象TestModel
public class TestModel
{
public string UserName { get; set; }
public string Sex { get; set; }
public string phone { get; set; }
}
//main方法
public static void Main()
{
TestModel model = new TestModel();
model.UserName = "张山";
model.Sex = "男";
model.phone = "135000";
//序列化 默认序列化器,仅支持 asnii编码 格式,以提升效率,使用时注意转码
string strJson = JsonSerializer.Serialize(model2);
//反序列化
var models= JsonSerializer.Deserialize<TestModel>(stuStr1);
string strContent1 = "对象序列化:" + strJson + "\n" +
"反序列化值:" + models.phone + " " + models.Sex + " " + models.UserName;
Console.WriteLine(strContent1);
}
注意:同时使用JSON.NET和 System.Text.Json会存在引用冲突,使用时注意避免。
3、DataContractJsonSerializer
这是.NET Framwork3.5自带的JSON序列化内库,System.Runtime.Serialization.Json可很好的完成JSON的解析,但是使用不是太便利。具体使用如下
//使用DataContractJsonSerializer方式需要引入的命名空间,using System.Runtime.Serialization.Json;
//公共的对象TestModel
public class TestModel
{
public string UserName { get; set; }
public string Sex { get; set; }
public string phone { get; set; }
}
//main方法
public static void Main()
{
TestModel model = new TestModel();
model.UserName = "张山";
model.Sex = "男";
model.phone = "135000";
//使用了JsonHelper类来实现具体方法
//序列化
string strJson = JsonHelper.ObjectToJson(model);
//Json反序列化对象
var models = JsonHelper.JsonToObject<TestModel>(strJson);
string strContent = "对象序列化:" + strJson + "\n" +
"反序列化值:" + models.phone + " " + models.Sex + " " + models.UserName;
Console.WriteLine(strContent);
}
//序列化Helper类
public static class JsonHelper //引用1
{
#region 第三种种 DataContractJsonSerializer
//注:可用[IgnoreDataMember] 标记不序列化的属性
//实体中的契约[DataMember],[DataContract],是使用DataContractJsonSerializer序列化和反序列化必须要加的
//对于其他两种方式不必加,也可以的。
public static string ObjectToJson(object obj)
{
using (MemoryStream stream = new MemoryStream())
{
DataContractJsonSerializer jsonSerialize = new DataContractJsonSerializer(obj.GetType());
jsonSerialize.WriteObject(stream, obj);
return Encoding.UTF8.GetString(stream.ToArray());
}
}
// 反序列化
public static T JsonToObject<T>(string strJson)
{
using (MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(strJson)))
{
DataContractJsonSerializer jsonSerialize = new DataContractJsonSerializer(typeof(T));
return (T)jsonSerialize.ReadObject(stream);
}
}
#endregion
}
4、JavaScriptSerializer
这个也是.NET 3.5推出的JSON序列化和反序列化类库,支持3.5以上的.NET Framwork版本,不支持.NET Core以上版本。
命名空间引用:System.Web.Script.Serialization。具体使用如下:
//使用JavaScriptSerializer方式需要引入的命名空间,System.Web.Script.Serialization;
//公共的对象TestModel
public class TestModel
{
public string UserName { get; set; }
public string Sex { get; set; }
public string phone { get; set; }
}
//main方法
public static void Main()
{
TestModel model = new TestModel();
model.UserName = "张山";
model.Sex = "男";
model.phone = "135000";
//使用了JsonHelper类来实现具体方法
//序列化
string strJson = JsonJavaScriptSerializer.ToJSON(model);
//Json反序列化对象
var models = JsonJavaScriptSerializer.FromJSON<TestModel>(strJson);
string strContent = "对象序列化:" + strJson + "\n" +
"反序列化值:" + models.phone + " " + models.Sex + " " + models.UserName;
Console.WriteLine(strContent);
Console.ReadLine();
}
public static class JsonJavaScriptSerializer
{
/// <summary>
/// 内存对象转换为json字符串
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public static string ToJSON(object obj)
{
StringBuilder sb = new StringBuilder();
JavaScriptSerializer json = new JavaScriptSerializer();
json.Serialize(obj, sb);
return sb.ToString();
}
/// <summary>
/// Json字符串转内存对象
/// </summary>
/// <param name="jsonString"></param>
/// <param name="obj"></param>
/// <returns></returns>
public static T FromJSON<T>(string jsonString)
{
JavaScriptSerializer json = new JavaScriptSerializer();
return json.Deserialize<T>(jsonString);
}
}
以上4种方法根据项目情况使用,如果是.net core 3.0以下版本推荐使用JSON.NET;.net core 3.0以上版本使用System.Text.Json。
如果你还有其它转换方式,欢迎留言讨论。