zoukankan      html  css  js  c++  java
  • Serialize&Deserialize

    至页首    至页尾

    1.XML

    1.1 XML序列化/反序列化

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Xml.Serialization;
    
    namespace XMLSerialize
    {
        public class UserInfo
        {
            public int Id;
            public string UserName;
            public string UserPass;
            public string Email;
            public DateTime RegTime;
        }
        class Program
        {
            private static List<UserInfo> list = new List<UserInfo>()
            {
                new UserInfo()
                {Id = 1,UserName = "Kyle",UserPass = "FDASDFAS",Email = "zhangsan@163.com",RegTime = DateTime.Now},
                new UserInfo()
                {Id = 2,UserName = "Bob",UserPass = "FDASDFAS",Email = "lisi@163.com",RegTime = DateTime.Now},
                new UserInfo()
                {Id = 3,UserName = "Lily",UserPass = "FDASDFAS",Email = "wangwu@163.com",RegTime = DateTime.Now},
                new UserInfo()
                {Id = 4,UserName = "John",UserPass = "FDASDFAS",Email = "zhaoliu@163.com",RegTime = DateTime.Now},
                new UserInfo()
                {Id = 5,UserName = "David",UserPass = "FDASDFAS",Email = "tianqi@163.com",RegTime = DateTime.Now},
                new UserInfo()
                {Id = 6,UserName = "Nancy",UserPass = "FDASDFAS",Email = "wangba@163.com",RegTime = DateTime.Now}
            };
            static void Main(string[] args)
            {
                //序列化对象生成文件
                WriteSingleXml();
                //反序列化文件生成对象
                ReadListXml();
                Console.ReadKey();
            }
            private static void WriteSingleXml()
            {
                //序列化集合为xml文件
                Console.WriteLine("collection to xml");
                var reader = new XmlSerializer(typeof(List<UserInfo>));
                //写入文件
                using (var fs = File.OpenWrite(@"D:UserInfo.xml"))
                {
                    reader.Serialize(fs, list);
                }
                Console.WriteLine("write in succeed");
            }
            private static void ReadListXml()
            {
                //反序列化文件
                Console.WriteLine("xml to collection");
                var reader = new XmlSerializer(typeof(List<UserInfo>));
                using (var fs = File.OpenRead(@"D:UserInfo.xml"))
                {
                    var result = reader.Deserialize(fs) as List<UserInfo>;
                    foreach (var r in result)
                    {
                        Console.WriteLine(r.Email);
                    }
                    //result.ForEach(Console.WriteLine);
                }
                Console.WriteLine("deserialize succeed");
            }
        }
    }
    

    output

    collection to xml
    write in succeed
    xml to collection
    zhangsan@163.com
    lisi@163.com
    wangwu@163.com
    zhaoliu@163.com
    tianqi@163.com
    wangba@163.com
    deserialize succeed
    

    XML

    <?xml version="1.0"?>
    <ArrayOfUserInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <UserInfo>
        <Id>1</Id>
        <UserName>Kyle</UserName>
        <UserPass>FDASDFAS</UserPass>
        <Email>zhangsan@163.com</Email>
        <RegTime>2018-09-19T14:51:03.3560463+08:00</RegTime>
      </UserInfo>
      <UserInfo>
        <Id>2</Id>
        <UserName>Bob</UserName>
        <UserPass>FDASDFAS</UserPass>
        <Email>lisi@163.com</Email>
        <RegTime>2018-09-19T14:51:03.3560463+08:00</RegTime>
      </UserInfo>
      ...
    </ArrayOfUserInfo>
    

    1.2 创建XML文件


    2.Json

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Runtime.Serialization;
    
    namespace JsonSerializerAndDeSerializer
    {
        [DataContract] // 使用DataContractJsonSerializer必需
       public class Student
        {
            [DataMember]
           public int ID { get; set; }
    
            [DataMember]
           public string Name { get; set; }
    
            [DataMember]
           public int Age { get; set; }
    
            [DataMember]
           public string Sex { get; set; }
        }
    }
    

    2.1 DataContractJsonSerializer

    using System.Runtime.Serialization.Json;
    
    Student stu = new Student()
     {
         ID = 1,
         Name = "kyle",
         Sex = "male",
         Age = 23
     };
    //序列化
    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":"kyle","Sex":"male","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.2 JavaScriptSerializer

    using System.Web.Script.Serialization;
    
    Student stu = new Student()
       {
           ID = 1,
           Name = "Bob",
           Age = 18,
           Sex = "male"
       };
    
    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(); 
    

    2.3 JSON.NET包

    首先安装newtonsoft.JSON或在Visual Studio中,工具菜单->管理NuGet包->搜索JSON.NET包

    using Newtonsoft.Json;
    
    List<Student> lstStuModel = new List<Student>() 
    {
    
    new Student(){ID=1,Name="A",Age=250,Sex="male"},
    new Student(){ID=2,Name="B",Age=300,Sex="female"}
    };
    
    //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(); 
    

    至目录    至页首

  • 相关阅读:
    LeetCode 79. 单词搜索
    LeetCode 1143. 最长公共子序列
    LeetCode 55. 跳跃游戏
    LeetCode 48. 旋转图像
    LeetCode 93. 复原 IP 地址
    LeetCode 456. 132模式
    LeetCode 341. 扁平化嵌套列表迭代器
    LeetCode 73. 矩阵置零
    LeetCode 47. 全排列 II
    LeetCode 46. 全排列
  • 原文地址:https://www.cnblogs.com/jizhiqiliao/p/10649098.html
Copyright © 2011-2022 走看看