NonSerializedAttribute 类  
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
指示可序列化类的某个字段不应被序列化。 此类不能被继承。
public ref class NonSerializedAttribute sealed : Attribute[System.AttributeUsage(System.AttributeTargets.Field, Inherited=false)]
public sealed class NonSerializedAttribute : Attribute[System.AttributeUsage(System.AttributeTargets.Field, Inherited=true)]
public sealed class NonSerializedAttribute : Attribute[System.AttributeUsage(System.AttributeTargets.Field, Inherited=false)]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class NonSerializedAttribute : Attribute[<System.AttributeUsage(System.AttributeTargets.Field, Inherited=false)>]
type NonSerializedAttribute = class
    inherit Attribute[<System.AttributeUsage(System.AttributeTargets.Field, Inherited=true)>]
type NonSerializedAttribute = class
    inherit Attribute[<System.AttributeUsage(System.AttributeTargets.Field, Inherited=false)>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type NonSerializedAttribute = class
    inherit AttributePublic NotInheritable Class NonSerializedAttribute
Inherits Attribute- 继承
- 属性
示例
以下示例演示了用 SerializableAttribute 属性标记的对象序列化,以及用 NonSerializedAttribute 序列化对象中标记的字段的行为。
备注
该代码使用 SoapFormatter 类序列化对象。 该类在默认情况下不会加载到项目中的system.runtime.serialization.formatters.soap.dll中找到。 若要运行代码,必须将对 DLL 的引用添加到项目中。
#using <system.dll>
#using <system.messaging.dll>
#using <System.Runtime.Serialization.Formatters.Soap.dll>
using namespace System;
using namespace System::IO;
using namespace System::Runtime::Serialization::Formatters::Soap;
// A test object that needs to be serialized.
[Serializable]
ref class TestSimpleObject
{
private:
   int member1;
   String^ member2;
   String^ member3;
   double member4;
public:
   // A field that is not serialized.
   [NonSerialized]
   String^ member5;
   TestSimpleObject()
   {
      member1 = 11;
      member2 = "hello";
      member3 = "hello";
      member4 = 3.14159265;
      member5 = "hello world!";
   }
   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 );
   }
};
int main()
{
   // Creates a new TestSimpleObject object.
   TestSimpleObject^ obj = gcnew 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 = gcnew SoapFormatter;
   //BinaryFormatter* formatter = new BinaryFormatter();
   formatter->Serialize( stream, obj );
   stream->Close();
   // Empties obj.
   obj = nullptr;
   // Opens file S"data.xml" and deserializes the object from it.
   stream = File::Open( "data.xml", FileMode::Open );
   formatter = gcnew SoapFormatter;
   //formatter = new BinaryFormatter();
   obj = dynamic_cast<TestSimpleObject^>(formatter->Deserialize( stream ));
   stream->Close();
   Console::WriteLine( "" );
   Console::WriteLine( "After deserialization the object contains: " );
   obj->Print();
}
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);
    }
}
open System
open System.IO
open System.Runtime.Serialization.Formatters.Soap
// A test object that needs to be serialized.
[<Serializable>]
type TestSimpleObject() =
    let member1 = 11
    let member2 = "hello"
    let member3 = "hello"
    let member4 = 3.14159265
    // A field that is not serialized.
    [<NonSerialized>]
    let member5 = "hello world!"
    member _.Print() =
        printfn $"member1 = '{member1}'"
        printfn $"member2 = '{member2}'"
        printfn $"member3 = '{member3}'"
        printfn $"member4 = '{member4}'"
        printfn $"member5 = '{member5}'"
[<EntryPoint>]
let main _ =
    // Creates a new TestSimpleObject object.
    let obj = TestSimpleObject()
    printfn "Before serialization the object contains: "
    obj.Print()
    // Opens a file and serializes the object into it in binary format.
    let stream = File.Open("data.xml", FileMode.Create)
    let formatter = SoapFormatter()
    //BinaryFormatter formatter = new BinaryFormatter()
    formatter.Serialize(stream, obj)
    stream.Close()
    // Opens file "data.xml" and deserializes the object from it.
    let stream = File.Open("data.xml", FileMode.Open)
    let formatter = new SoapFormatter()
    let obj = formatter.Deserialize stream :?> TestSimpleObject
    stream.Close()
    printfn "\nAfter deserialization the object contains: "
    obj.Print()
    0
Imports System.IO
Imports System.Runtime.Serialization
Imports System.Runtime.Serialization.Formatters.Soap
Public Class Test
   
   Public Shared Sub Main()
      
      ' Creates a new TestSimpleObject object.
      Dim obj As New TestSimpleObject()
      
      Console.WriteLine("Before serialization the object contains: ")
      obj.Print()
      
      ' Opens a file and serializes the object into it in binary format.
      Dim stream As Stream = File.Open("data.xml", FileMode.Create)
      Dim formatter As New SoapFormatter()
      
      formatter.Serialize(stream, obj)
      stream.Close()
      
      ' Empties obj.
      obj = Nothing
      
      ' Opens file "data.xml" and deserializes the object from it.
      stream = File.Open("data.xml", FileMode.Open)
      formatter = New SoapFormatter()
      obj = CType(formatter.Deserialize(stream), TestSimpleObject)
      stream.Close()
      
      Console.WriteLine("")
      Console.WriteLine("After deserialization the object contains: ")
      obj.Print()
   End Sub
End Class
' A test object that needs to be serialized.
<Serializable()> Public Class TestSimpleObject
   
   Public member1 As Integer
   Public member2 As String
   Public member3 As String
   Public member4 As Double
   
   ' A member that is not serialized.
   <NonSerialized()> Public member5 As String  
  
   
   Public Sub New()     
      member1 = 11
      member2 = "hello"
      member3 = "hello"
      member4 = 3.14159265
      member5 = "hello world!"
   End Sub
      
   
   Public Sub 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)
   End Sub
End Class
注解
使用 BinaryFormatter 或 SoapFormatter 类序列化对象时,请使用 NonSerializedAttribute 该属性来阻止对字段进行序列化。 例如,可以使用此属性来防止对敏感数据进行序列化。
属性的目标对象 NonSerializedAttribute 是可序列化类的公共字段和专用字段。 默认情况下,除非类被 SerializableAttribute标记为可序列化,否则类不可序列化。 在序列化过程中,默认情况下会序列化类的所有公共字段和专用字段。 在序列化期间,标记的 NonSerializedAttribute 字段将被排除。 如果使用 XmlSerializer 类序列化对象,请使用 XmlIgnoreAttribute 该类获取相同的功能。 或者,实现 ISerializable 接口以显式控制序列化过程。 请注意,实现 ISerializable 的类仍必须标有 SerializableAttribute。
若要将 NonSerializedAttribute 类应用于事件,请将属性位置设置为字段,如以下 C# 代码所示。
[field:NonSerializedAttribute()]   
public event ChangedEventHandler Changed;  
如果字段未序列化,但它仍然需要在反序列化后必须提供的默认值,则可以创建一个提供具有值字段的方法,然后将该方法应用于 OnDeserializedAttribute 该方法。
有关使用属性的详细信息,请参阅 “属性”。
构造函数
| NonSerializedAttribute() | 初始化 NonSerializedAttribute 类的新实例。 | 
属性
| TypeId | 在派生类中实现时,获取此 Attribute 的唯一标识符。(继承自 Attribute) | 
方法
| Equals(Object) | 返回一个值,该值指示此实例是否与指定的对象相等。(继承自 Attribute) | 
| GetHashCode() | 返回此实例的哈希代码。(继承自 Attribute) | 
| GetType() | 获取当前实例的 Type。(继承自 Object) | 
| IsDefaultAttribute() | 在派生类中重写时,指示此实例的值是否是派生类的默认值。(继承自 Attribute) | 
| Match(Object) | 当在派生类中重写时,返回一个指示此实例是否等于指定对象的值。(继承自 Attribute) | 
| MemberwiseClone() | 创建当前 Object 的浅表副本。(继承自 Object) | 
| ToString() | 返回表示当前对象的字符串。(继承自 Object) | 
显式接口实现
| _Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) | 将一组名称映射为对应的一组调度标识符。(继承自 Attribute) | 
| _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) | 检索对象的类型信息,然后可以使用该信息获取接口的类型信息。(继承自 Attribute) | 
| _Attribute.GetTypeInfoCount(UInt32) | 检索对象提供的类型信息接口的数量(0 或 1)。(继承自 Attribute) | 
| _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) | 提供对某一对象公开的属性和方法的访问。(继承自 Attribute) |