none
.Net 中 IDictionary 为吗不能 XML 串行化? RRS feed

  • 问题

  • .Net 中 IDictionary 为吗不能 XML 串行化? 

    补充:俺就是说 实现了 IDictionary 的类就不能 XML 串行化(System.XML.Secrializtion.),为吗? 实现 Icollection 就可以,这是什么道理?


    FlyGugu~~
    • 已编辑 FlyGugu 2009年2月10日 6:14
    2009年2月6日 8:11

答案

  • 使用 XmLSerializer 类可将下列项序列化:

    • 公共类的公共读/写属性和字段

    • 实现 ICollection 或 IEnumerable 的类

      Note注意

      只有集合会被序列化,而公共属性却不会。

    • XmlElement 对象

    • XmlNode 对象

    • DataSet 对象


    XML 序列化注意事项

    使用 XmlSerializer 类时,应考虑下列情况:

    • Sgen.exe 工具专门用于生成序列化程序集,以获得最佳性能。

    • 序列化数据只包含数据本身以及类的结构。不包括类型标识和程序集信息。

    • 只能序列化公共属性和字段。如果需要序列化非公共数据,请使用 BinaryFormatter 类而不是 XML 序列化。

    • 类必须有一个将由 XmlSerializer 序列化的默认构造函数。

    • 不能序列化方法。

    • XmlSerializer 可以以不同方式处理实现 IEnumerable 或 ICollection 的类,条件是这些类满足某些要求,如下所示。

      实现 IEnumerable 的类必须实现带单个参数的公共 Add 方法。Add 方法的参数必须与从 GetEnumerator 方法返回的 IEnumerator.Current 属性所返回的类型一致(多态)。

      除 实现 IEnumerable 外还实现 ICollection 的类(如 CollectionBase)必须有一个值为整数的公共 Item 索引属性(在 C# 中为索引器),并且必须有一个整数类型的公共 Count 属性。传递给 Add 方法的参数必须与从 Item 属性返回的类型相同或与该类型的某个基的类型相同。//IDictionary 同时继承了ICollection, IEnumerable


    • 对于实现 ICollection 的类,要序列化的值将从索引的 Item 属性检索,而不是通过调用 GetEnumerator 来检索。另外,除返回另一个集合类(实现 ICollection 的集合类)的公共字段之外,将不序列化其他公共字段和属性。有关示例,请参见 XML 序列化的示例

    具体情况你可以参考微软官方文档。
    http://msdn.microsoft.com/zh-cn/library/182eeyhh(VS.80).aspx




    Microsoft Online Community Support
    2009年2月10日 7:34

全部回复

  • 串行化需要一个类而不是接口
    MSMVP VC++
    2009年2月7日 21:07
    版主
  • .NET中如果想要XML串行化一个类,这个类必须实现ISerializable 接口或使用SerializableAttribute修饰。
    Microsoft Online Community Support
    2009年2月9日 8:18
  • 你这说的是 2进制的 串行化, 我说的是 XML 串行化, System.XML.Serialization...
    FlyGugu~~
    2009年2月10日 6:16
  •  俺就是说 实现了 IDictionary 的类就不能 XML 串行化(System.XML.Secrializtion.),为吗? 实现 Icollection 就可以,这是什么道理?

    FlyGugu~~
    2009年2月10日 6:17
  • 使用 XmLSerializer 类可将下列项序列化:

    • 公共类的公共读/写属性和字段

    • 实现 ICollection 或 IEnumerable 的类

      Note注意

      只有集合会被序列化,而公共属性却不会。

    • XmlElement 对象

    • XmlNode 对象

    • DataSet 对象


    XML 序列化注意事项

    使用 XmlSerializer 类时,应考虑下列情况:

    • Sgen.exe 工具专门用于生成序列化程序集,以获得最佳性能。

    • 序列化数据只包含数据本身以及类的结构。不包括类型标识和程序集信息。

    • 只能序列化公共属性和字段。如果需要序列化非公共数据,请使用 BinaryFormatter 类而不是 XML 序列化。

    • 类必须有一个将由 XmlSerializer 序列化的默认构造函数。

    • 不能序列化方法。

    • XmlSerializer 可以以不同方式处理实现 IEnumerable 或 ICollection 的类,条件是这些类满足某些要求,如下所示。

      实现 IEnumerable 的类必须实现带单个参数的公共 Add 方法。Add 方法的参数必须与从 GetEnumerator 方法返回的 IEnumerator.Current 属性所返回的类型一致(多态)。

      除 实现 IEnumerable 外还实现 ICollection 的类(如 CollectionBase)必须有一个值为整数的公共 Item 索引属性(在 C# 中为索引器),并且必须有一个整数类型的公共 Count 属性。传递给 Add 方法的参数必须与从 Item 属性返回的类型相同或与该类型的某个基的类型相同。//IDictionary 同时继承了ICollection, IEnumerable


    • 对于实现 ICollection 的类,要序列化的值将从索引的 Item 属性检索,而不是通过调用 GetEnumerator 来检索。另外,除返回另一个集合类(实现 ICollection 的集合类)的公共字段之外,将不序列化其他公共字段和属性。有关示例,请参见 XML 序列化的示例

    具体情况你可以参考微软官方文档。
    http://msdn.microsoft.com/zh-cn/library/182eeyhh(VS.80).aspx




    Microsoft Online Community Support
    2009年2月10日 7:34