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(); 
    

    至目录    至页首

  • 相关阅读:
    Updatepanel 中使用 Timer 控件 失去焦点问题
    获取周一还是周日作为首日
    存储过程
    ASP.NEt ajax 弹出窗口在页面无法关闭
    Gridview 每秒刷新数据
    SharePoint 2013 set site mailbox
    SharePoint 2010 将带有工作流的模板移动到另一个站点集
    Infoapth 使用拼写 并加载web part 在Infopath的页面上
    ECMA 上传文件到SHarePoint 文档库
    数据库如何高效率处理百万以上的查询
  • 原文地址:https://www.cnblogs.com/jizhiqiliao/p/10649098.html
Copyright © 2011-2022 走看看