NetDataContractSerializer Klasa
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Serializuje i deserializuje wystąpienie typu do strumienia XML lub dokumentu przy użyciu podanych typów .NET Framework. Klasa ta nie może być dziedziczona.
public ref class NetDataContractSerializer sealed : System::Runtime::Serialization::XmlObjectSerializer, System::Runtime::Serialization::IFormatter
public sealed class NetDataContractSerializer : System.Runtime.Serialization.XmlObjectSerializer, System.Runtime.Serialization.IFormatter
type NetDataContractSerializer = class
inherit XmlObjectSerializer
interface IFormatter
Public NotInheritable Class NetDataContractSerializer
Inherits XmlObjectSerializer
Implements IFormatter
- Dziedziczenie
- Implementuje
Przykłady
Poniższy przykładowy kod przedstawia typ o nazwie , Person
który jest serializowany przez NetDataContractSerializerelement . Atrybut DataContractAttribute jest stosowany do klasy i DataMemberAttribute jest stosowany do składowych (w tym prywatnego elementu członkowskiego), aby poinstruować NetDataContractSerializer , co należy serializować.
// You must apply a DataContractAttribute or SerializableAttribute
// to a class to have it serialized by the NetDataContractSerializer.
[DataContract(Name = "Customer", Namespace = "http://www.contoso.com")]
class Person : IExtensibleDataObject
{
[DataMember()]
public string FirstName;
[DataMember]
public string LastName;
[DataMember()]
public int ID;
public Person(string newfName, string newLName, int newID)
{
FirstName = newfName;
LastName = newLName;
ID = newID;
}
private ExtensionDataObject extensionData_Value;
public ExtensionDataObject ExtensionData
{
get
{
return extensionData_Value;
}
set
{
extensionData_Value = value;
}
}
}
public sealed class Test
{
private Test() { }
public static void Main()
{
try
{
WriteObject("NetDataContractSerializerExample.xml");
ReadObject("NetDataContractSerializerExample.xml");
}
catch (SerializationException serExc)
{
Console.WriteLine("Serialization Failed");
Console.WriteLine(serExc.Message);
}
catch (Exception exc)
{
Console.WriteLine(
"The serialization operation failed: {0} StackTrace: {1}",
exc.Message, exc.StackTrace);
}
finally
{
Console.WriteLine("Press <Enter> to exit....");
Console.ReadLine();
}
}
public static void WriteObject(string fileName)
{
Console.WriteLine(
"Creating a Person object and serializing it.");
Person p1 = new Person("Zighetti", "Barbara", 101);
FileStream fs = new FileStream(fileName, FileMode.Create);
XmlDictionaryWriter writer = XmlDictionaryWriter.CreateTextWriter(fs);
NetDataContractSerializer ser =
new NetDataContractSerializer();
ser.WriteObject(writer, p1);
writer.Close();
}
public static void ReadObject(string fileName)
{
Console.WriteLine("Deserializing an instance of the object.");
FileStream fs = new FileStream(fileName,
FileMode.Open);
XmlDictionaryReader reader =
XmlDictionaryReader.CreateTextReader(fs, new XmlDictionaryReaderQuotas());
NetDataContractSerializer ser = new NetDataContractSerializer();
// Deserialize the data and read it from the instance.
Person deserializedPerson =
(Person)ser.ReadObject(reader, true);
fs.Close();
Console.WriteLine(String.Format("{0} {1}, ID: {2}",
deserializedPerson.FirstName, deserializedPerson.LastName,
deserializedPerson.ID));
}
}
' You must apply a DataContractAttribute or SerializableAttribute
' to a class to have it serialized by the NetDataContractSerializer.
<DataContract(Name := "Customer", [Namespace] := "http://www.contoso.com")> _
Class Person
Implements IExtensibleDataObject
<DataMember()> _
Public FirstName As String
<DataMember()> _
Public LastName As String
<DataMember()> _
Public ID As Integer
Public Sub New(ByVal newfName As String, ByVal newLName As String, _
ByVal newID As Integer)
FirstName = newfName
LastName = newLName
ID = newID
End Sub
Private extensionData_Value As ExtensionDataObject
Public Property ExtensionData() As ExtensionDataObject _
Implements IExtensibleDataObject.ExtensionData
Get
Return extensionData_Value
End Get
Set
extensionData_Value = value
End Set
End Property
End Class
NotInheritable Public Class Test
Private Sub New()
End Sub
Public Shared Sub Main()
Try
WriteObject("NetDataContractSerializerExample.xml")
ReadObject("NetDataContractSerializerExample.xml")
Catch serExc As SerializationException
Console.WriteLine("Serialization Failed")
Console.WriteLine(serExc.Message)
Catch exc As Exception
Console.WriteLine("The serialization operation failed: {0} StackTrace: {1}", exc.Message, exc.StackTrace)
Finally
Console.WriteLine("Press <Enter> to exit....")
Console.ReadLine()
End Try
End Sub
Public Shared Sub WriteObject(ByVal fileName As String)
Console.WriteLine("Creating a Person object and serializing it.")
Dim p1 As New Person("Zighetti", "Barbara", 101)
Dim fs As New FileStream(fileName, FileMode.Create)
Dim writer As XmlDictionaryWriter = XmlDictionaryWriter.CreateTextWriter(fs)
Dim ser As New System.Runtime.Serialization.NetDataContractSerializer()
ser.WriteObject(writer, p1)
writer.Close()
End Sub
Public Shared Sub ReadObject(ByVal fileName As String)
Console.WriteLine("Deserializing an instance of the object.")
Dim fs As New FileStream(fileName, FileMode.Open)
Dim reader As XmlDictionaryReader = _
XmlDictionaryReader.CreateTextReader(fs, New XmlDictionaryReaderQuotas())
Dim ser As New System.Runtime.Serialization.NetDataContractSerializer()
' Deserialize the data and read it from the instance.
Dim deserializedPerson As Person = CType(ser.ReadObject(reader, True), Person)
fs.Close()
Console.WriteLine(String.Format("{0} {1}, ID: {2}", deserializedPerson.FirstName, deserializedPerson.LastName, deserializedPerson.ID))
End Sub
End Class
Uwagi
Zabezpieczenia
NetDataContractSerializer jest niezabezpieczona. Aby uzyskać więcej informacji, zobacz BinaryFormatter security guide (Przewodnik po zabezpieczeniach BinaryFormatter).
Różni NetDataContractSerializer się od DataContractSerializer tego w jeden ważny sposób: NetDataContractSerializer zawiera informacje o typie CLR w serializowanym formacie XML, natomiast nie DataContractSerializer . W związku z tym można go NetDataContractSerializer użyć tylko wtedy, gdy zarówno serializacji, jak i deserializacji końce współdzielą te same typy CLR.
Serializator może serializować typy, do których DataContractAttribute zastosowano atrybut lub SerializableAttribute . Serializuje również typy implementujące ISerializablemetodę .
Aby uzyskać więcej informacji na temat serializacji, zobacz Serializacja i Deserializacja.
Niezgodność z elementem XElement
Klasa XElement służy do pisania kodu XML.
NetDataContractSerializer
Nie można jednak serializować wystąpienia typu. W związku z tym następujący kod kończy się niepowodzeniem z wyjątkiem: "Typ główny "System.Xml. Linq.XElement' nie jest obsługiwany na najwyższym poziomie przez NetDataContractSerializer, ponieważ jest to IXmlSerializable z elementem IsAny
=true
i musi zapisywać całą jego zawartość, w tym element główny.
FileStream fs = new FileStream("mystuff.xml", FileMode.Create, FileAccess.ReadWrite);
XElement myElement = new XElement("Parent", new XElement("child1", "form"),
new XElement("child2", "base"),
new XElement("child3", "formbase")
);
NetDataContractSerializer dcs = new NetDataContractSerializer();
dcs.WriteObject(fs, myElement);
Dim fs As New FileStream("mystuff.xml", FileMode.Create, FileAccess.ReadWrite)
Dim myElement As New XElement("Parent", New XElement("child1", "form"), _
New XElement("child2", "base"), _
New XElement("child3", "formbase") _
)
Dim ser As New System.Runtime.Serialization. _
NetDataContractSerializer()
ser.WriteObject(fs, myElement)
XElement
Jeśli jednak element jest używany jako typ pola lub właściwości klasy, dane zawarte w polu lub właściwości są serializowane. Jest to spowodowane tym, że jako element członkowski klasy dane nie są najwyższym poziomem klasy.
Konstruktory
NetDataContractSerializer() |
Inicjuje nowe wystąpienie klasy NetDataContractSerializer. |
NetDataContractSerializer(StreamingContext) |
Inicjuje NetDataContractSerializer nowe wystąpienie klasy z podanymi danymi kontekstu przesyłania strumieniowego. |
NetDataContractSerializer(StreamingContext, Int32, Boolean, FormatterAssemblyStyle, ISurrogateSelector) |
Inicjuje nowe wystąpienie NetDataContractSerializer klasy z podanymi danymi kontekstowymi. Ponadto określa maksymalną liczbę elementów w obiekcie do serializacji, a parametry określające, czy dodatkowe dane są ignorowane, metoda ładowania zestawu i selektor zastępczy. |
NetDataContractSerializer(String, String) |
Inicjuje NetDataContractSerializer nowe wystąpienie klasy z podanym elementem głównym XML i przestrzenią nazw. |
NetDataContractSerializer(String, String, StreamingContext, Int32, Boolean, FormatterAssemblyStyle, ISurrogateSelector) |
Inicjuje nowe wystąpienie NetDataContractSerializer klasy z podanymi danymi kontekstowymi oraz nazwą główną i przestrzenią nazw. Ponadto określa maksymalną liczbę elementów w obiekcie do serializacji, a parametry określające, czy dodatkowe dane są ignorowane, metoda ładowania zestawu i selektor zastępczy. |
NetDataContractSerializer(XmlDictionaryString, XmlDictionaryString) |
Inicjuje nowe wystąpienie NetDataContractSerializer klasy z dwoma parametrami typu XmlDictionaryString , które zawierają element główny i przestrzeń nazw używaną do określania zawartości. |
NetDataContractSerializer(XmlDictionaryString, XmlDictionaryString, StreamingContext, Int32, Boolean, FormatterAssemblyStyle, ISurrogateSelector) |
Inicjuje nowe wystąpienie NetDataContractSerializer klasy z podanymi danymi kontekstowymi oraz główną nazwą i przestrzenią nazw (jako XmlDictionaryString parametry); ponadto określa maksymalną liczbę elementów w obiekcie do serializacji, a parametry określające, czy dodatkowe dane są ignorowane, metoda ładowania zestawu i selektor zastępczy. |
Właściwości
AssemblyFormat |
Pobiera wartość określającą metodę lokalizowania i ładowania zestawów. |
Binder |
Pobiera lub ustawia obiekt, który kontroluje ładowanie klas. |
Context |
Pobiera lub ustawia obiekt, który umożliwia przekazywanie danych kontekstowych, które są przydatne podczas serializacji lub deserializacji. |
IgnoreExtensionDataObject |
Pobiera wartość określającą, czy dane dostarczone przez rozszerzenie obiektu są ignorowane. |
MaxItemsInObjectGraph |
Pobiera maksymalną liczbę elementów dozwolonych w obiekcie do serializacji. |
SurrogateSelector |
Pobiera lub ustawia obiekt, który pomaga formaterowi podczas wybierania zastępczego na potrzeby serializacji. |
Metody
Deserialize(Stream) |
Deserializuje dokument XML lub przesyła strumieniowo do obiektu. |
Equals(Object) |
Określa, czy dany obiekt jest taki sam, jak bieżący obiekt. (Odziedziczone po Object) |
GetHashCode() |
Służy jako domyślna funkcja skrótu. (Odziedziczone po Object) |
GetType() |
Type Pobiera bieżące wystąpienie. (Odziedziczone po Object) |
IsStartObject(XmlDictionaryReader) |
Określa, czy obiekt XmlDictionaryReader jest umieszczony na obiekcie, który można deserializować przy użyciu określonego czytnika. |
IsStartObject(XmlReader) |
Określa, czy obiekt XmlReader jest umieszczony na obiekcie, który można deserializować przy użyciu określonego czytnika. |
MemberwiseClone() |
Tworzy płytkią kopię bieżącego Objectelementu . (Odziedziczone po Object) |
ReadObject(Stream) |
Odczytuje strumień XML lub dokument z obiektem Stream i zwraca obiekt deserializowany. (Odziedziczone po XmlObjectSerializer) |
ReadObject(XmlDictionaryReader) |
Odczytuje dokument XML lub strumień z obiektem XmlDictionaryReader i zwraca obiekt deserializowany. (Odziedziczone po XmlObjectSerializer) |
ReadObject(XmlDictionaryReader, Boolean) |
Odczytuje strumień XML lub dokument z obiektem XmlDictionaryReader i zwraca obiekt deserializowany, a także sprawdza, czy dane obiektu są zgodne z nazwą i przestrzenią nazw używaną do tworzenia serializatora. |
ReadObject(XmlReader) |
Odczytuje strumień XML lub dokument z obiektem XmlDictionaryReader i zwraca obiekt deserializowany. |
ReadObject(XmlReader, Boolean) |
Odczytuje strumień XML lub dokument z obiektem XmlDictionaryReader i zwraca obiekt deserializowany, a także sprawdza, czy dane obiektu są zgodne z nazwą i przestrzenią nazw używaną do tworzenia serializatora. |
Serialize(Stream, Object) |
Serializuje określony graf obiektu przy użyciu określonego składnika zapisywania. |
ToString() |
Zwraca ciąg reprezentujący bieżący obiekt. (Odziedziczone po Object) |
WriteEndObject(XmlDictionaryWriter) |
Zapisuje zamykający element XML przy użyciu elementu XmlDictionaryWriter. |
WriteEndObject(XmlWriter) |
Zapisuje zamykający element XML przy użyciu elementu XmlWriter. |
WriteObject(Stream, Object) |
Zapisuje pełną zawartość (początek, zawartość i koniec) obiektu do dokumentu XML lub strumienia o określonej wartości Stream. (Odziedziczone po XmlObjectSerializer) |
WriteObject(XmlDictionaryWriter, Object) |
Zapisuje pełną zawartość (początek, zawartość i koniec) obiektu do dokumentu XML lub strumienia o określonej wartości XmlDictionaryWriter. (Odziedziczone po XmlObjectSerializer) |
WriteObject(XmlWriter, Object) |
Zapisuje pełną zawartość (początek, zawartość i koniec) obiektu do dokumentu XML lub strumienia o określonej wartości XmlWriter. |
WriteObjectContent(XmlDictionaryWriter, Object) |
Zapisuje zawartość XML przy użyciu elementu XmlDictionaryWriter. |
WriteObjectContent(XmlWriter, Object) |
Zapisuje zawartość XML przy użyciu elementu XmlWriter. |
WriteStartObject(XmlDictionaryWriter, Object) |
Zapisuje otwierający element XML przy użyciu elementu XmlDictionaryWriter. |
WriteStartObject(XmlWriter, Object) |
Zapisuje otwierający element XML przy użyciu elementu XmlWriter. |