C#编程总结(一)序列化总结

2019-12-30 14:47:05王旭

其他控制手段,具体可见http://www.easck.com/zh-cn/library/83y7df3e(v=vs.80).aspx

4、将对象序列化为 SOAP 编码的 XML 流

http://www.easck.com/zh-cn/library/bd04skah(v=vs.80).aspx

注意

XML 序列化不转换方法、索引器、私有字段或只读属性(只读集合除外)。要序列化对象的所有字段和属性(公共的和私有的),请使用 BinaryFormatter,而不要使用 XML 序列化。

DataContractSerializer

使用提供的数据协定,将类型实例序列化和反序列化为 XML 流或文档。 此类不能被继承。

DataContractSerializer 用于序列化和反序列化在 Windows Communication Foundation (WCF) 消息中发送的数据。 通过将 DataContractAttribute 属性 (Attribute) 应用于类,而将 DataMemberAttribute 属性 (Attribute) 应用于类成员,可以指定要序列化的属性 (Property) 和字段。

使用步骤:

1)DataContractSerializer 与 DataContractAttribute 和 DataMemberAttribute 类结合使用。

要准备序列化某个类,请将 DataContractAttribute 应用于该类。 对于返回要序列化的数据的类的每个成员,请应用 DataMemberAttribute。 您可以序列化字段和属性,而无论其可访问性级别是什么:private、protected、internal、protected internal 或 public。

2)添加到已知类型的集合中

在序列化或反序列化对象时,DataContractSerializer 必须“已知”该类型。 首先,创建一个实现 IEnumerable<T>(如 List<T>)的类实例,并将已知类型添加到集合中。 然后,使用接受 IEnumerable<T>(例如,[M:System.Runtime.Serialization.DataContractSerializer.#ctor(System.Type,System.Collections.Generic.IEnumerable{System.Type}])的重载之一创建 DataContractSerializer 的实例。

具体实例:


namespace DataContractSerializerExample
{
  using System;
  using System.Collections;
  using System.Collections.Generic;
  using System.Runtime.Serialization;
  using System.Xml;

  // You must apply a DataContractAttribute or SerializableAttribute
  // to a class to have it serialized by the DataContractSerializer.
  [DataContract(Name = "Customer", Namespace = "http://www.easck.com// Deserialize the data and read it from the instance.
      Person deserializedPerson =
        (Person)ser.ReadObject(reader, true);
      reader.Close();
      fs.Close();
      Console.WriteLine(String.Format("{0} {1}, ID: {2}",
      deserializedPerson.FirstName, deserializedPerson.LastName,
      deserializedPerson.ID));
    }
  }

DataContractJsonSerializer

将对象序列化为 JavaScript 对象表示法 (JSON),并将 JSON 数据反序列化为对象。 此类不能被继承。

具体使用与DataContractSerializer类似。这里不再赘述。

下面对这些方法的使用做了汇总,希望能给大家带来一些帮助。