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

常用的类库有:

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 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;
 //公共的对象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。

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

引用1:

https://www.cnblogs.com/1312mn/p/9174415.html

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

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

小编微信:mm1552923   

公众号:dotNet编程大全    

  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值