导出 (0) 打印
全部展开
此文章由机器翻译。 将光标移到文章的句子上,以查看原文。 更多信息。
译文
原文

SerializationInfo 类

存储将对象序列化或反序列化所需的全部数据。 此类不能被继承。

System.Object
  System.Runtime.Serialization.SerializationInfo

命名空间:  System.Runtime.Serialization
程序集:  mscorlib(在 mscorlib.dll 中)

[ComVisibleAttribute(true)]
public sealed class SerializationInfo

SerializationInfo 类型公开以下成员。

  名称说明
公共方法SerializationInfo(Type, IFormatterConverter)创建 SerializationInfo 类的新实例。
公共方法SerializationInfo(Type, IFormatterConverter, Boolean)初始化 SerializationInfo 类的新实例。
页首

  名称说明
公共属性AssemblyName仅在序列化期间获取或设置要序列化的类型的程序集名称。
公共属性FullTypeName获取或设置要序列化的 Type 的全名。
公共属性IsAssemblyNameSetExplicit获取程序集名称是否已经显式设置。
公共属性IsFullTypeNameSetExplicit获取完整类型名称是否已经显式设置。
公共属性MemberCount获取已添加到 SerializationInfo 存储区中的成员的数目。
公共属性ObjectType返回要序列化的对象的类型。
页首

  名称说明
公共方法AddValue(String, Boolean)SerializationInfo 存储区中添加一个布尔值。
公共方法AddValue(String, Byte)SerializationInfo 存储区中添加一个 8 位无符号整数值。
公共方法AddValue(String, Char)SerializationInfo 存储区中添加一个 Unicode 字符值。
公共方法AddValue(String, DateTime)SerializationInfo 存储区中添加一个 DateTime 值。
公共方法AddValue(String, Decimal)SerializationInfo 存储区中添加一个十进制值。
公共方法AddValue(String, Double)SerializationInfo 存储区中添加一个双精度浮点值。
公共方法AddValue(String, Int16)SerializationInfo 存储区中添加一个 16 位有符号整数值。
公共方法AddValue(String, Int32)SerializationInfo 存储区中添加一个 32 位有符号整数值。
公共方法AddValue(String, Int64)SerializationInfo 存储区中添加一个 64 位有符号整数值。
公共方法AddValue(String, Object)将指定的对象添加到与指定的名称关联的 SerializationInfo 存储区。
公共方法AddValue(String, SByte)SerializationInfo 存储区中添加一个 8 位有符号整数值。
公共方法AddValue(String, Single)SerializationInfo 存储区中添加一个单精度浮点值。
公共方法AddValue(String, UInt16)SerializationInfo 存储区中添加一个 16 位无符号整数值。
公共方法AddValue(String, UInt32)SerializationInfo 存储区中添加一个 32 位无符号整数值。
公共方法AddValue(String, UInt64)SerializationInfo 存储区中添加一个 64 位无符号整数值。
公共方法AddValue(String, Object, Type)将一个值添加到 SerializationInfo 存储区中,其中 valuename 相关联,并序列化为 Typetype
公共方法Equals(Object)确定指定的对象是否等于当前对象。 (继承自 Object。)
公共方法GetBooleanSerializationInfo 存储区中检索一个布尔值。
公共方法GetByteSerializationInfo 存储区中检索一个 8 位无符号整数值。
公共方法GetCharSerializationInfo 存储区中检索一个 Unicode 字符值。
公共方法GetDateTimeSerializationInfo 存储区中检索一个 DateTime 值。
公共方法GetDecimalSerializationInfo 存储区中检索一个十进制值。
公共方法GetDoubleSerializationInfo 存储区中检索一个双精度浮点值。
公共方法GetEnumerator返回一个 SerializationInfoEnumerator,它用于循环访问 SerializationInfo 存储区中的名称/值对。
公共方法GetHashCode作为默认哈希函数。 (继承自 Object。)
公共方法GetInt16SerializationInfo 存储区中检索一个 16 位有符号整数值。
公共方法GetInt32SerializationInfo 存储区中检索一个 32 位有符号整数值。
公共方法GetInt64SerializationInfo 存储区中检索一个 64 位有符号整数值。
公共方法GetSByteSerializationInfo 存储区中检索一个 8 位有符号整数值。
公共方法GetSingleSerializationInfo 存储区中检索一个单精度浮点值。
公共方法GetStringSerializationInfo 存储区中检索一个 String 值。
公共方法GetType获取当前实例的 Type (继承自 Object。)
公共方法GetUInt16SerializationInfo 存储区中检索一个 16 位无符号整数值。
公共方法GetUInt32SerializationInfo 存储区中检索一个 32 位无符号整数值。
公共方法GetUInt64SerializationInfo 存储区中检索一个 64 位无符号整数值。
公共方法GetValueSerializationInfo 存储区中检索一个值。
公共方法SetType设置要序列化的对象的 Type
公共方法ToString返回表示当前对象的字符串。 (继承自 Object。)
页首

此类由具有自定义序列化行为的对象使用。 ISerializable ISerializationSurrogate 上的 GetObjectData 方法使用要序列化的每条信息的名称、类型和值来填充 SerializationInfo 存储区。 在反序列化过程中,适当的函数可以提取此信息。

在序列化时,使用 AddValue 方法将对象添加到 SerializationInfo 存储区中;在反序列化时,使用 GetValue 方法从 SerializationInfo 存储区中提取对象。

有关如何自定义序列化的更多信息,请参见 自定义序列化

下面的代码示例演示各种值的自定义序列化和反序列化的 SerializationInfo


using System;
using System.Text;
using System.IO;
// Add references to Soap and Binary formatters.
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization.Formatters.Soap ;
using System.Runtime.Serialization;


[Serializable]
public class MyItemType : ISerializable
{
    public MyItemType()
    {
        // Empty constructor required to compile.
    }

    // The value to serialize.
    private string myProperty_value;

    public string MyProperty
    {
        get { return myProperty_value; }
        set { myProperty_value = value; }
    }

    // Implement this method to serialize data. The method is called 
    // on serialization.
    public void GetObjectData(SerializationInfo info, StreamingContext context)
    {
        // Use the AddValue method to specify serialized values.
        info.AddValue("props", myProperty_value, typeof(string));

    }

    // The special constructor is used to deserialize values.
    public MyItemType(SerializationInfo info, StreamingContext context)
    {
        // Reset the property value using the GetValue method.
        myProperty_value = (string) info.GetValue("props", typeof(string));
    }
}

// This is a console application. 
public static class Test
{
    static void Main()
    {
        // This is the name of the file holding the data. You can use any file extension you like.
        string fileName = "dataStuff.myData";

        // Use a BinaryFormatter or SoapFormatter.
        IFormatter formatter = new BinaryFormatter();
        //IFormatter formatter = new SoapFormatter();

        Test.SerializeItem(fileName, formatter); // Serialize an instance of the class.
        Test.DeserializeItem(fileName, formatter); // Deserialize the instance.
        Console.WriteLine("Done");
        Console.ReadLine();
    }

    public static void SerializeItem(string fileName, IFormatter formatter)
    {
        // Create an instance of the type and serialize it.
        MyItemType t = new MyItemType();
        t.MyProperty = "Hello World";

        FileStream s = new FileStream(fileName , FileMode.Create);
        formatter.Serialize(s, t);            
        s.Close();
    }


    public static void DeserializeItem(string fileName, IFormatter formatter)
    {
        FileStream s = new FileStream(fileName, FileMode.Open);
        MyItemType t = (MyItemType)formatter.Deserialize(s);
        Console.WriteLine(t.MyProperty);            
    }       
}


.NET Framework

受以下版本支持:4.5.2、4.5.1、4.5、4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持:4、3.5 SP1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008(不支持服务器核心角色), Windows Server 2008 R2(支持带 SP1 或更高版本的服务器核心角色;不支持 Itanium)

.NET Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参阅.NET Framework 系统要求

此类型的任何公共 static(在 Visual Basic 中为 Shared) 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

社区附加资源

添加
显示:
© 2014 Microsoft