C#复杂对象序列化,推荐二进制
2017-08-16 11:46
267 查看
复杂对象用xml序列化,一会儿这里不对,一会儿那里不对,直接用二进制分分钟搞定,++
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序列化不便的话,可考虑用二进制序列化
转自:http://blog.163.com/eric_wyf@126/blog/static/20865365201011165108234/
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序列化不便的话,可考虑用二进制序列化
转自:http://blog.163.com/eric_wyf@126/blog/static/20865365201011165108234/
相关文章推荐
- C# 以二进制序列化DataSet对象
- C# .Net 对象二进制序列化
- C# 实现复杂对象的序列化与反序列化[收藏此页] [打印]【IT168知识库】
- C# 实现复杂对象的序列化与反序列化
- C#把对象序列化成二进制文件
- C# 对象二进制序列化
- C# 对象二进制序列化
- c#对象序列化(二进制序列化)BinaryFormatter【转】
- C#温故而知新学习系列之XML编程—6-XmlSerializer类把复杂对象序列化为XML文档
- C#温故而知新学习系列之XML编程—XmlSerializer类把复杂对象序列化为XML文档(六)
- C#之序列化对象(二进制方式序列化对象)
- C# 实现复杂对象的序列化与反序列化
- C# 对象二进制序列化
- C#中对象的序列化与反序列化
- [Serializable]在C#中的作用——实现.NET对象序列化
- [Serializable]在C#中的作用-NET 中的对象序列化
- Java,C#使用二进制序列化、反序列化操作数据
- C#中对象,对象集合的简单Xml序列化与反序列化(已测试)
- java 对象序列化实现复杂UI对象状态的保存。
- C#对象序列化与反序列化