System.NonSerializedAttribute 类

方法描述

指示可序列化类的某个字段不应被序列化。 此类不能被继承。

语法定义(C# System.NonSerializedAttribute 类 的用法)

[AttributeUsageAttribute(AttributeTargets.Field, Inherited = false)]
[ComVisibleAttribute(true)]
public sealed class NonSerializedAttribute : Attribute

构造函数

构造函数名称 构造函数描述
NonSerializedAttribute 初始化 NonSerializedAttribute 类的新实例。

成员/方法

方法名称 方法描述
Equals 基础结构。返回一个值,该值指示此实例是否与指定的对象相等。 (继承自 Attribute。)
Finalize 允许对象在“垃圾回收”回收之前尝试释放资源并执行其他清理操作。 (继承自 Object。)
GetHashCode 返回此实例的哈希代码。 (继承自 Attribute。)
GetType 获取当前实例的 Type。 (继承自 Object。)
IsDefaultAttribute 当在派生类中重写时,指示此实例的值是否是派生类的默认值。 (继承自 Attribute。)
Match 当在派生类中重写时,返回一个指示此实例是否等于指定对象的值。 (继承自 Attribute。)
MemberwiseClone 创建当前 Object 的浅表副本。 (继承自 Object。)
ToString 返回表示当前对象的字符串。 (继承自 Object。)

提示和注释

使用 BinaryFormatter 或 SoapFormatter 类序列化对象时,使用 NonSerializedAttribute 特性防止字段被序列化。 例如,可以使用此特性防止序列化敏感数据。

NonSerializedAttribute 特性的目标对象为可序列化类的公共和私有字段。 默认情况下类都是不可序列化的,除非使用 SerializableAttribute 进行标记。 在序列化进程中,默认情况下将序列化类的所有公共和私有字段。 用 NonSerializedAttribute 标记的字段在序列化过程中被排除在外。 如果使用 XmlSerializer 类序列化对象,则使用 XmlIgnoreAttribute 类获取相同的功能。 也可以实现 ISerializable 接口以显式控制序列化进程。 注意,实现 ISerializable 的类仍然必须使用 SerializableAttribute 进行标记。

若要将 NonSerializedAttribute 类应用于事件,请将该特性位置设置为字段,如下面的 C# 代码中所示。

复制

[field:NonSerializedAttribute()]

public event ChangedEventHandler Changed;

如果一个字段未序列化,但它仍要求在反序列化之后必须提供默认值,则可以创建向该字段提供值的方法,然后将 OnDeserializedAttribute 应用于该方法。

有关使用特性的更多信息,请参见利用特性扩展元数据。

System.NonSerializedAttribute 类例子

若要运行此代码,必须在项目中添加对 DLL 的引用。

using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Soap;
//using System.Runtime.Serialization.Formatters.Binary;

public class Test {
   public static void Main()  {

      //Creates a new TestSimpleObject object.
      TestSimpleObject obj = new TestSimpleObject();

      Console.WriteLine("Before serialization the object contains: ");
      obj.Print();

      //Opens a file and serializes the object into it in binary format.
      Stream stream = File.Open("data.xml", FileMode.Create);
      SoapFormatter formatter = new SoapFormatter();

      //BinaryFormatter formatter = new BinaryFormatter();

      formatter.Serialize(stream, obj);
      stream.Close();

      //Empties obj.
      obj = null;

      //Opens file "data.xml" and deserializes the object from it.
      stream = File.Open("data.xml", FileMode.Open);
      formatter = new SoapFormatter();

      //formatter = new BinaryFormatter();

      obj = (TestSimpleObject)formatter.Deserialize(stream);
      stream.Close();

      Console.WriteLine("");
      Console.WriteLine("After deserialization the object contains: ");
      obj.Print();
   }
}


// A test object that needs to be serialized.
[Serializable()]		
public class TestSimpleObject  {

    public int member1;
    public string member2;
    public string member3;
    public double member4;

    // A field that is not serialized.
    [NonSerialized()] public string member5; 

    public TestSimpleObject() {

        member1 = 11;
        member2 = "hello";
        member3 = "hello";
        member4 = 3.14159265;
        member5 = "hello world!";
    }


    public void Print() {

        Console.WriteLine("member1 = '{0}'", member1);
        Console.WriteLine("member2 = '{0}'", member2);
        Console.WriteLine("member3 = '{0}'", member3);
        Console.WriteLine("member4 = '{0}'", member4);
        Console.WriteLine("member5 = '{0}'", member5);
    }
}

继承层次结构

System.Object

System.Attribute

System.NonSerializedAttribute

命名空间

namespace: System

程序集: mscorlib(在 mscorlib.dll 中)

线程安全

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

版本信息

.NET Framework 受以下版本支持:4、3.5、3.0、2.0、1.1、1.0 .NET Framework Client Profile 受以下版本支持:4、3.5 SP1

适用平台

Windows 7, Windows Vista SP1 或更高版本, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008(不支持服务器核心), Windows Server 2008 R2(支持 SP1 或更高版本的服务器核心), Windows Server 2003 SP2 .NET Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见.NET Framework 系统要求。