在.NET中,所有的集合都实现了IEnumerable接口,比如Array、Hashtable、ArrayList、Stack、Queue 等。有的集合要求元素具有相同的类型,这种集合一般通过泛型的方式定义,它们实现另一个接口IEnumerable<T> (IEnumerable<T>本身继承自IEnumerable),这样的集合有List<T>、 Dictionary<TKey,TValue>、Stack<T>、Queue<T>等。基于集合类型的序列化具 有一些特殊的规则和行为,在上篇中我们详细介绍了基于泛型数据契约的序列化规则,接下来我们介绍基于集合对象的序列化,以及基于集合类型的服务操作。

一、IEnumerable<T>、Array与IList<T>

一 个集合对象能够被序列化的前提是集合中的每个元素都能被序列化,也就是要求元素的类型是一个数据契约(或者是应用了 SerialiableAttribute特性)。虽然集合具有各种各样的表现形式,由于其本质就是一组对象的组 合,DataContractSerializer在对它们进行序列化的时候,采用的序列化规则和序列化过程中表现出来的行为是相似的。比如我们现在需要 通过DataContractSerializer序列化一个Customer对象的集合,Customer类型定义如下。

namespace Artech.DataContractSerializerDemos
   2: {
)]
class Customer
   5:     {
   6:         [DataMember(Order = 1)]
public Guid ID
   8:         { get; set; }
   9:  
  10:         [DataMember(Order=2)]
string Name
  12:         { get; set; }
  13:  
  14:         [DataMember(Order = 3)]
string Phone
  16:         { get; set; }
  17:  
  18:         [DataMember(Order = 4)]
string CompanyAddress
  20:         { get; set; }
  21:     }
  22: }

现在我通过我们前面定义的范型Serialize<T>对以下3种不同类型的集合对象进行序列化:IEnumerable<Customer>、IList<Cusomter>和Customer[]。

new Customer
   2:      {
   3:          ID             = Guid.NewGuid(),
,
,
   7:      }; 
   8:  
new Customer
  10: {
  11:     ID         = Guid.NewGuid(),
,
,
  15: };
new Customer[] { customerFoo, customerBar };
  17: IEnumerable<Customer> customerCollection = customerArray;
  18: IList<Customer> customerList = customerArray.ToList<Customer>(); 
  19:  
);
);

相关文章:

  • 2022-03-05
  • 2021-06-08
  • 2021-06-03
  • 2021-11-16
  • 2022-12-23
  • 2021-11-09
猜你喜欢
  • 2021-06-21
  • 2021-11-14
  • 2021-04-19
  • 2021-08-18
  • 2021-05-21
  • 2022-12-23
相关资源
相似解决方案