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序列化不便的话,可考虑用二进制序列化

    在很多情况下,二进制序列化对对象的序列化信息更加完整、准确。
  • 相关阅读:
    题目1441:人见人爱 A ^ B(二分求幂)
    题目1003:A+B(按逗号分隔的A+B)
    题目1002:Grading(题目背景基于高考打分的简单判断)
    题目1104:整除问题(还是求素数)
    题目1040:Prime Number(第k个素数)
    题目1440:Goldbach's Conjecture(哥达巴赫猜想)
    题目1438:最小公倍数(利用最大公倍数求解)
    题目1439:Least Common Multiple(求m个正数的最小公倍数lcm)
    题目1080:进制转换(任意进制直接转换方法)
    题目1083:特殊乘法(求模运算符的使用)
  • 原文地址:https://www.cnblogs.com/ysharp/p/2025690.html
Copyright © 2011-2022 走看看