• Json 序列化学习笔记(1)


    通过asp.net 3.5自带的类来序列化和反序列化Json。

    有两种方式:

    1.通过DataContractJsonSerializer类实现Json

    为了使用这个类实现Json序列化,需要引用System.ServiceModel.Web和System.Runtime.Serialization

    using System.Runtime.Serialization.Json;

    属性说明:

    DataMember:定义序列化属性参数(使用DataMember属性必须使用DataContract属性标记类,否则无效)

    IgnoreDataMember:定义成员不被序列化

    例子:

    序列化

        [DataContract]
        public class Student
        {
            [DataMember]
            public int Id;
    
            [DataMember(Name = "UserName")]
            public string Name;
    
            [IgnoreDataMember]
            public int Age;
        }
        
        static void Main(string[] args)
        {        
            Student student = new Student
            {
                Id = 1,
                Name = "yxg",
                Age = 30
            };
    
            Console.WriteLine(student.ToJsJson());
                
            Console.Read();
        }
    
    结果:

    jieguo

    反序列化

        static void Main(string[] args)
        {       
            string s_student = "{\"Id\":1,\"UserName\":\"yxg\",\"Age\":30}";
    
            Student student = s_student.FromJsonTo<Student>();
    
            Console.WriteLine(string.Format("Id:{0},Name:{1},Age:{2}", student.Id, student.Name, student.Age));
                
            Console.Read();
        }

    结果:

    json2

    以上操作通过使用下面的封装类实现:

        public static class JsonHelper
        {
            /// <summary>
            /// Json序列化,用于发送到客户端
            /// </summary>
            public static string ToJsJson(this object item)
            {
                
                DataContractJsonSerializer serializer = new DataContractJsonSerializer(item.GetType());
    
                using (MemoryStream ms = new MemoryStream())
                {
    
                    serializer.WriteObject(ms, item);
    
                    StringBuilder sb = new StringBuilder();
    
                    sb.Append(Encoding.UTF8.GetString(ms.ToArray()));
    
                    return sb.ToString();
                }
            }
    
            /// <summary>
            /// Json反序列化,用于接收客户端Json后生成对应的对象
            /// </summary>
            public static T FromJsonTo<T>(this string jsonString)
            {
    
                DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
    
                MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));
    
                T jsonObject = (T)ser.ReadObject(ms);
    
                ms.Close();
    
                return jsonObject;
    
            }
    
        }

    2.通过JavaScriptSerializer类来实现Json

    为了使用这个类实现Json序列化,需要引用System.ServiceModel.Web和

    System.Runtime.Serialization和System.Web.Extensions

    using System.Web.Script.Serialization;
    using System.Runtime.Serialization.Json;
    using System.Runtime.Serialization;
    

    属性说明:

    ScriptIgnore:定义成员不被序列化

    例子:

    序列化

        public class Student
        {
    
            public int Id;
    
            public string Name;
    
            [ScriptIgnore]
            public int Age;
        }
    
        static void Main(string[] args)
        {
            JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();
    
            Student student = new Student
            {
                Id = 1,
                Name = "yxg",
                Age = 30
            };
    
            Console.WriteLine(jsonSerializer.Serialize(student));
    
            Console.Read();
        }

    结果:

    json3

    反序列化

        static void Main(string[] args)
        {
            string s_student = "{\"Id\":1,\"UserName\":\"yxg\",\"Age\":30}";
    
            JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();
    
            Student student = jsonSerializer.Deserialize<Student>(s_student);
    
            Console.WriteLine(string.Format("Id:{0},Name:{1},Age:{2}", student.Id, student.Name, student.Age));
    
            Console.Read();
        }

    结果:

    json4

    这个类操作简单,不用单独封装。

  • 相关阅读:
    css引入方式
    HTML标签
    动态导入模块impoerlib
    pymysql连接数据库
    创建数据库表之引擎
    IO多路复用互动聊天,select函数监听
    欧拉筛法求素数个数
    与三角形相关的问题 WITH 有向面积
    时间复杂度的计算
    折半查找
  • 原文地址:https://www.cnblogs.com/yangxi1081/p/2437769.html
Copyright © 2020-2023  润新知