zoukankan      html  css  js  c++  java
  • XML序列化

    常见的两种模式,Binary和XML序列化,Binary二进制序列化没有什么限制,但是XML序列化有限制:

        (1)需序列化的字段必须是公共的(public)
        (2)需要序列化的类都必须有一个无参的构造函数
        (3)枚举变量可序列化为字符串,无需用[XmlInclude]
        (4)导出非基本类型对象,都必须用[XmlInclude]事先声明。该规则递归作用到子元素
            如导出ArrayList对象,若其成员是自定义的,需预包含处理:
            using System.Xml.Serialization;
            [XmlInclude(typeof(自定义类))]
        (5)Attribute中的IsNullable参数若等于false,表示若元素为null则不显示该元素。
            也就是说:针对值类型(如结构体)该功能是实效的
            若数组包含了100个空间,填充了10个类对象,则序列化后只显示10个节点
            若数组包含了100个空间,填充了10个结构体对象,则序列化后会显示100个节点
        (6)真正无法XML序列化的情况
            某些类就是无法XML序列化的(即使使用了[XmlInclude])
                IDictionary(如HashTable)
                System.Drawing.Color
                System.Drawing.Font
                SecurityAttribute声明
            父类对象赋予子类对象值的情况
            对象间循环引用
        (7)对于无法XML序列化的对象,可考虑
            使用自定义xml序列化(实现IXmlSerializable接口)
            实现IDictionary的类,可考虑(1)用其它集合类替代;(2)用类封装之,并提供Add和this函数
            某些类型需要先经过转换,然后才能序列化为 XML。如XML序列化System.Drawing.Color,可先用ToArgb()将其转换为整数
            过于复杂的对象用xml序列化不便的话,可考虑用二进制序列化

    在很多情况下,二进制序列化对对象的序列化信息更加完整、准确。
  • 相关阅读:
    harbor镜像拉取到本地
    hadoop单机部署
    tcpdump抓包
    centos7安装桌面启动`
    lvm虚拟机扩容虚拟机根目录
    ubuntu 18 静态网址及生效
    ubuntu安装微信
    QPS、TPS、PV、UV、GMV、IP、RPS
    RabbitMQ死信队列
    mysql update语句与limit的结合使用
  • 原文地址:https://www.cnblogs.com/ysharp/p/2025690.html
Copyright © 2011-2022 走看看