• Serialization,Serialize未知类型的对象


    1.下面的实例code中public object ObjectValue { get; set; },不知道其具体的类型,但是仍然可以进行序列化和反序列化。
    2. 成员变量加Attribute [XmlElement("Value")]可以在序列化时改变节点的名字,如果不加这个attribute,序列化后的相关xml的节点名字就是成员变量的名字。
       成员变量加[XmlIgnore]表示该成员变量不参与序列化/反序列化。
    using System;
    using System.Collections.Generic;
    using System.Globalization;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Xml.Serialization;
    
    namespace serialization
    {
        class Program
        {
            static void Main(string[] args)
            {
                XmlSerializer serializer = new XmlSerializer(typeof(TemplateDescription[]));
                StringWriter writer = new StringWriter(CultureInfo.InvariantCulture);
    
                List<TemplateDescription> list = new List<TemplateDescription>();
                TemplateDescription template = new TemplateDescription("aaa", "bbb", 100);
                template.ObjectValue = new int[2] { 1, 2 };
    
                list.Add(template);
    
                // Serrilize
                serializer.Serialize(writer, list.ToArray());
                File.WriteAllText(@"d:\serialize.txt", writer.ToString());
                Console.WriteLine(writer.ToString());
    
                // DeSerialize
                TemplateDescription[] test = (TemplateDescription[])serializer.Deserialize(new StringReader(writer.ToString()));
                Console.WriteLine(test[0].ToString());
    
                // 输出结果参考
                /*
                <?xml version="1.0" encoding="utf-16"?>
    <ArrayOfTemplateDescription xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <TemplateDescription>
        <Name>aaa</Name>
        <Description>bbb</Description>
        <ID>100</ID>
        <Value xsi:type="ArrayOfInt">
          <int>1</int>
          <int>2</int>
        </Value>
      </TemplateDescription>
    </ArrayOfTemplateDescription>
    serialization.TemplateDescription
                */
            }
        }
    
        [XmlInclude(typeof(int[]))]
        public class TemplateDescription
        {
            public TemplateDescription()
            {
                this.Name = string.Empty;
                this.Description = string.Empty;
                this.ID = 0;
                this.ObjectValue = null;
            }
    
            public TemplateDescription(string name, string description, int id)
            {
                this.Name = name;
                this.Description = description;
                this.ID = id;
            }
    
            public string Name { get; set; }
    
            public string Description { get; set; }
    
            public int ID { get; set; }
    
            [XmlElement("Value")]
            public object ObjectValue { get; set; }
    
            [XmlIgnore]
            public int[] IntegerArrayValue
            {
                get { return (int[])ObjectValue; }
                set { ObjectValue = value; }
            }
    
            [XmlIgnore]
            public byte[] ByteArrayValue
            {
                get { return (byte[])ObjectValue; }
                set { ObjectValue = value; }
            }
        }
    }
  • 相关阅读:
    vue生命周期简介和钩子函数
    vue.js 笔记
    vue-cli安装以及搭建vue项目详细步骤
    nodejs 报错
    线程池 一 ThreadPoolExecutor
    JUC 一 线程池
    线程八锁
    JUC 一 ReentrantReadWriteLock
    JUC 一 ReentrantLock 可重入锁
    JUC 一 CountDownLatch(闭锁)
  • 原文地址:https://www.cnblogs.com/dirichlet/p/1983267.html
Copyright © 2020-2023  润新知