C#中对象与JSON字符串互相转换的四种种方式

编程入门 行业动态 更新时间:2024-10-26 18:27:26

C#中对象与JSON字符串互相转换的<a href=https://www.elefans.com/category/jswz/34/1769239.html style=四种种方式"/>

C#中对象与JSON字符串互相转换的四种种方式

常用的类库有:

JSON.NET, System.Text.Json,

DataContractJsonSerializer,JavaScriptSerializer

1、JSON.NET

Json.Net是 framework 使用的比较频繁的Json序列化组件,Json.Net已经支持 core,最新版本已经到v13版,使用Json.NET类库需要引入的命名空间 using Newtonsoft.Json并需要下载nuget包。使用具体如下

//引用using Newtonsoft.Json;//公共的对象TestModelpublic 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";  //序列化var stustrjson = JsonConvert.SerializeObject(model);//反序列化var fanstustr2= JsonConvert.DeserializeObject<TestModel>(stustrjson);string strContent1 = "对象序列化:" + strJson + "\n" +"反序列化值:" + models.phone + " " + models.Sex + " " + models.UserName;Console.WriteLine(strContent1);
}

2、System.Text.Json

微软在.NET Core 3.0 提供了一个名为System.Text.Json的全新命名空间,使用时需要引入的命名空间System.Text.Json,相比Json.Net据说性能提高不少。如果是在.NET Core 3.0 以上版本建议使用。具体使用如下

//引用using System.Text.Json;//公共的对象TestModelpublic 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;//公共的对象TestModelpublic 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;//公共的对象TestModelpublic 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种方法根据项目情况使用,如果是 core 3.0以下版本推荐使用JSON.NET, core 3.0以上版本使用System.Text.Json。

如果你还有其它转换方式,欢迎留言讨论。

引用1:

.html

版权声明:本文来源于网友收集或网友提供,仅供学习交流之用,如果有侵权,请转告版主或者留言,本公众号立即删除。

技术群:添加小编微信并备注进群

小编微信:mm1552923   

公众号:dotNet编程大全    

更多推荐

C#中对象与JSON字符串互相转换的四种种方式

本文发布于:2024-03-05 01:24:33,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1710947.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:四种   字符串   对象   方式   JSON

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!