SerializableAttribute Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Указывает, что класс может быть сериализован. Этот класс не наследуется.
public ref class SerializableAttribute sealed : Attribute
[System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Delegate | System.AttributeTargets.Enum | System.AttributeTargets.Struct, Inherited=false)]
public sealed class SerializableAttribute : Attribute
[System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Delegate | System.AttributeTargets.Enum | System.AttributeTargets.Struct, Inherited=false)]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class SerializableAttribute : Attribute
[<System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Delegate | System.AttributeTargets.Enum | System.AttributeTargets.Struct, Inherited=false)>]
type SerializableAttribute = class
inherit Attribute
[<System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Delegate | System.AttributeTargets.Enum | System.AttributeTargets.Struct, Inherited=false)>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type SerializableAttribute = class
inherit Attribute
Public NotInheritable Class SerializableAttribute
Inherits Attribute
- Наследование
- Атрибуты
Примеры
В следующем примере показана сериализация объекта, помеченного атрибутом SerializableAttribute . Чтобы использовать BinaryFormatter вместо SoapFormatterстроки, раскомментируйте соответствующие строки.
#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
Комментарии
Примените к типу атрибут SerializableAttribute, чтобы указать возможность сериализации экземпляров этого типа. Среда CLR создает исключение SerializationException , если какой-либо тип в графе сериализуемых объектов не SerializableAttribute применяет атрибут.
SerializableAttribute Примените атрибут, даже если класс также реализует ISerializable интерфейс для управления процессом сериализации.
При применении атрибута SerializableAttribute к типу все закрытые и открытые поля сериализуются по умолчанию. Сериализация можно управлять более детально, реализовав ISerializable интерфейс для переопределения процесса сериализации.
Или можно исключить поля из сериализации, применив NonSerializedAttribute атрибут к полю. Если поле сериализуемого типа содержит указатель, дескриптор или другую структуру данных, относящуюся к определенной среде, и не может быть значимо восстановлено в другой среде, то может потребоваться применить NonSerializedAttribute атрибут к данному полю.
Дополнительные сведения об использовании атрибутов см. в разделе "Атрибуты". Дополнительные сведения о сериализации см. в разделе System.Runtime.Serialization.
Конструкторы
SerializableAttribute() |
Инициализирует новый экземпляр класса SerializableAttribute. |
Свойства
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) |