序列化與反序列化類別(class)

  • 108
  • 0
  • 2020-08-27

序列化與反序列化非常方便,建立class後可以序列化存起來,需要的時候再返序列化把資料全部都讀回來。

直接高清有碼放上來


    public static class SiteHelper
    {
        public static string Serialize(object o)
        {
            XmlSerializer ser = new XmlSerializer(o.GetType());
            StringBuilder sb = new StringBuilder();
            StringWriter writer = new StringWriter(sb);
            ser.Serialize(writer, o);
            return sb.ToString();
        }

        public static T Deserialize<T>(string s)
        {
            XmlDocument xdoc = new XmlDocument();

            try
            {
                xdoc.LoadXml(s);
                XmlNodeReader reader = new XmlNodeReader(xdoc.DocumentElement);
                XmlSerializer ser = new XmlSerializer(typeof(T));
                object obj = ser.Deserialize(reader);

                return (T)obj;
            }
            catch
            {
                return default(T);
            }
        }
    }

忘了從哪裡得到這段Code的,反正很好用就是

以下為使用方法

1.建立Class(記得public)

    public class Car
    {
        public string name { get; set; }
        public int ID { get; set; }
    }

2.使用(反)序列化

            Car myCar = new Car() { ID = 1, name = "wade Car" };
            List<Car> myCars = new List<Car>() {
                new Car { ID = 1 , name = "car1"},
                new Car { ID = 2, name = "car2"},
                new Car { ID = 3, name = "car3"},
                new Car { ID = 4, name = "car4"}
                };

            string s = SiteHelper.Serialize(myCars);
            List<Car> o = SiteHelper.Deserialize<List<Car>>(s);

            foreach (var c in o)
            {
                Console.WriteLine($" ID = {c.ID} , name = {c.name}");
            }

            Console.ReadLine();

 

執行結果:

序列化之後可以把xml檔存起來,要是需要使用這份資料就把這個檔案反序列化回來

之前是用在機台的參數存檔,把機台參數存在電腦某處,由於每個機台設備都有些許小差異,部分參數會不同於其他機台,這時候執行程式時就能把該設備的參數提出來使用,修改參數時也能再存檔以利下次機台的使用。

 

 

08/27更新

補上其他序列化的程式碼(好像快一點點)

 public static class Serialization
    {
        public static string Serialize<T>(T ObjectToSerialize)
        {
            XmlSerializer xmlSerializer = new XmlSerializer(ObjectToSerialize.GetType());

            using StringWriter textWriter = new StringWriter();
            xmlSerializer.Serialize(textWriter, ObjectToSerialize);
            return textWriter.ToString();
        }


        public static T Deserialize<T>(string input) where T : class
        {
            XmlSerializer ser = new XmlSerializer(typeof(T));

            using StringReader sr = new StringReader(input);
            return (T)ser.Deserialize(sr);
        }
    }

另外補上XML的檔案

<?xml version="1.0" encoding="utf-16"?>
<ArrayOfCar xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Car>
    <name>car1</name>
    <ID>1</ID>
  </Car>
  <Car>
    <name>car2</name>
    <ID>2</ID>
  </Car>
  <Car>
    <name>car3</name>
    <ID>3</ID>
  </Car>
  <Car>
    <name>car4</name>
    <ID>4</ID>
  </Car>
</ArrayOfCar>