序列化与反序列化

序列化和反序列化的三种方法:

1.使用JavaScriptSerializer类

2.使用DataContractJsonSerializer类

3.使用JSON.NET类库

第一种方法:

//使用JavaScriptSerializer方式需要引入的命名空间,这个在程序集System.Web.Extensions.dll.中
using System.Web.Script.Serialization;
1.JavaScriptSerializer方式实现序列化和反序列化
            Student stu = new Student()
               {
                   ID = 1,
                   Name = "张三",
                   Age = 2000,
                   Sex = "男"
               };

            JavaScriptSerializer js = new JavaScriptSerializer();
            string jsonData = js.Serialize(stu);//序列化
            Console.WriteLine(jsonData);


            ////反序列化方式一:
            string desJson = jsonData;
            //Student model = js.Deserialize<Student>(desJson);// //反序列化
            //string message = string.Format("ID={0},Name={1},Age={2},Sex={3}", model.ID, model.Name, model.Age, model.Sex);
            //Console.WriteLine(message);
            //Console.ReadKey(); 


            ////反序列化方式2
            dynamic modelDy = js.Deserialize<dynamic>(desJson); //反序列化
            string messageDy = string.Format("动态的反序列化,ID={0},Name={1},Age={2},Sex={3}",
                modelDy["ID"], modelDy["Name"], modelDy["Age"], modelDy["Sex"]);//这里要使用索引取值,不能使用对象.属性
            Console.WriteLine(messageDy);
            Console.ReadKey();

或者

//反序列化

Student _object = Utility.Serializer.Deserialize<Student>(apiSource);//source中含有的Json字符串

//从实体中循环获取
foreach (var item in _object.docs)//这个想要循环获取list中多个相同的字段时只点到list名称即可
{
string t = item.pid;

batchList.Add(t);

这个方法要先建立实体

 

第二种方法:

//使用DataContractJsonSerializer方式需要引入的命名空间,在System.Runtime.Serialization.dll.中
using System.Runtime.Serialization.Json;
1.DataContractJsonSerializer方式序列化和反序列化
            Student stu = new Student()
             {
                 ID = 1,
                 Name = "张三",
                 Sex = "男",
                 Age = 1000
             };
            //序列化
            DataContractJsonSerializer js = new DataContractJsonSerializer(typeof(Student));
            MemoryStream msObj = new MemoryStream();
            //将序列化之后的Json格式数据写入流中
            js.WriteObject(msObj, stu);
            msObj.Position = 0;
            //从0这个位置开始读取流中的数据
            StreamReader sr = new StreamReader(msObj, Encoding.UTF8);
            string json = sr.ReadToEnd();
            sr.Close();
            msObj.Close();
            Console.WriteLine(json);


            //反序列化
            string toDes = json;
            //string to = "{"ID":"1","Name":"张三","Sex":"男","Age":"1230"}";
            using (var ms = new MemoryStream(Encoding.Unicode.GetBytes(toDes)))
            {
                DataContractJsonSerializer deseralizer = new DataContractJsonSerializer(typeof(Student));
                Student model = (Student)deseralizer.ReadObject(ms);// //反序列化ReadObject
                Console.WriteLine("ID=" + model.ID);
                Console.WriteLine("Name=" + model.Name);
                Console.WriteLine("Age=" + model.Age);
                Console.WriteLine("Sex=" + model.Sex);
            }
            Console.ReadKey(); 
2.在执行第一步的时候需要先建立实体类
public class Student
    {
       
       public int ID { get; set; }

       
       public string Name { get; set; }

       
       public int Age { get; set; }

       
       public string Sex { get; set; }
    }

第三种方法:
//使用JSON.NET方式需要引入的命名空间,在MiniNet.Utility中
using MiniNet.Utility;
1.Json.NET序列化
            List<Student> lstStuModel = new List<Student>() 
            {
            
            new Student(){ID=1,Name="老黄",Age=250,Sex="男"},
            new Student(){ID=2,Name="凤姐",Age=300,Sex="女"}
            };

            //Json.NET序列化
            string jsonData = JsonConvert.SerializeObject(lstStuModel);

            Console.WriteLine(jsonData);
            Console.ReadKey();


            //Json.NET反序列化
            string json = @"{ 'Name':'C#','Age':'3000','ID':'1','Sex':'女'}";
            Student descJsonStu = JsonConvert.DeserializeObject<Student>(json);//反序列化
            Console.WriteLine(string.Format("反序列化: ID={0},Name={1},Sex={2},Sex={3}", descJsonStu.ID, descJsonStu.Name, descJsonStu.Age, descJsonStu.Sex));
            Console.ReadKey(); 
或者

Hashtable baseHash = JSON.JsonDecode(apiSource) as Hashtable;

ArrayList textDemo = baseHash["docs"] as ArrayList;//list字段
foreach (Hashtable item in textDemo)
{
string pid = Convert.ToInt64(item["pid"]).ToString();//循环获取list下的全部pid
}

 
原文地址:https://www.cnblogs.com/MrReed/p/8534271.html