zoukankan      html  css  js  c++  java
  • 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; }
            }
        }
    }
  • 相关阅读:
    XML和JSON优缺点
    JSON与XML优缺点对比分析
    json数据格式
    ajax 请求二进制流 图片
    常用网站
    Js setTimeout 用法
    js Indexof的用法
    02_虚拟机的安装和SecureCRT、FileZilla、Xmanage、UltraEdit工具的介绍
    01_Hadoop学习笔记内容说明
    sudoers文件设置sudo命令无密码(root密码)登录
  • 原文地址:https://www.cnblogs.com/dirichlet/p/1983267.html
Copyright © 2011-2022 走看看