NetDataContractSerializer Třída
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Serializuje a deserializuje instanci typu do datového proudu XML nebo dokumentu pomocí zadaných typů .NET. Tato třída se nemůže dědit.
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
- Dědičnost
- Implementuje
Příklady
Následující příklad kódu ukazuje typ pojmenovanýPerson, který je serializován .NetDataContractSerializer Atribut DataContractAttribute se použije na třídu a DataMemberAttribute použije se u členů (včetně soukromého členu) a dá pokyn k NetDataContractSerializer serializaci.
// 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
Poznámky
Zabezpečení
NetDataContractSerializer je nezabezpečená. Další informace naleznete v příručce zabezpečení BinaryFormatter.
Liší NetDataContractSerializer se od důležitého DataContractSerializer způsobu: NetDataContractSerializer zahrnuje informace o typu CLR v serializovaném XML, zatímco DataContractSerializer ne. Proto lze použít pouze v případě, NetDataContractSerializer že serializace i deserializace končí sdílet stejné typy CLR.
Serializátor může serializovat typy, u kterých DataContractAttribute byl použit atribut nebo atribut SerializableAttribute . Také serializuje typy, které implementují ISerializable.
Další informace o serializaci naleznete v tématu Serializace a Deserializace.
Nekompatibilitu s XElementem
Třída XElement se používá k zápisu XML. Nelze NetDataContractSerializer však serializovat instanci typu. Následující kód proto selže s výjimkou: "Kořenový typ System.Xml.Linq.XElement" není podporován na nejvyšší úrovni NetDataContractSerializer, protože je IXmlSerializable s IsAny=true a musí zapsat veškerý jeho obsah včetně kořenového elementu.
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)
Pokud XElement se však používá jako typ pole nebo vlastnosti třídy, data obsažená polem nebo vlastností jsou serializována. Důvodem je to, že jako člen třídy nejsou data nejvyšší úrovní třídy.
Konstruktory
| Name | Description |
|---|---|
| NetDataContractSerializer() |
Inicializuje novou instanci NetDataContractSerializer třídy. |
| NetDataContractSerializer(StreamingContext, Int32, Boolean, FormatterAssemblyStyle, ISurrogateSelector) |
Inicializuje novou instanci NetDataContractSerializer třídy se zadanými kontextovými daty; kromě toho určuje maximální počet položek v objektu, které mají být serializovány, a parametry určující, zda jsou nadbytečná data ignorována, metoda načítání sestavení a náhradní selektor. |
| NetDataContractSerializer(StreamingContext) |
Inicializuje novou instanci NetDataContractSerializer třídy se zadanými kontextovými daty streamování. |
| NetDataContractSerializer(String, String, StreamingContext, Int32, Boolean, FormatterAssemblyStyle, ISurrogateSelector) |
Inicializuje novou instanci NetDataContractSerializer třídy se zadanými kontextovými daty a kořenovým názvem a oborem názvů; kromě toho určuje maximální počet položek v objektu, které mají být serializovány, a parametry určující, zda jsou nadbytečná data ignorována, metoda načítání sestavení a náhradní selektor. |
| NetDataContractSerializer(String, String) |
Inicializuje novou instanci NetDataContractSerializer třídy se zadaným kořenovým elementem XML a oborem názvů. |
| NetDataContractSerializer(XmlDictionaryString, XmlDictionaryString, StreamingContext, Int32, Boolean, FormatterAssemblyStyle, ISurrogateSelector) |
Inicializuje novou instanci NetDataContractSerializer třídy se zadanými kontextovými daty a kořenovým názvem a oborem názvů (jako XmlDictionaryString parametry); kromě toho určuje maximální počet položek v objektu, které mají být serializovány, a parametry určující, zda jsou nalezena extra data ignorována, metoda načítání sestavení a náhradní selektor. |
| NetDataContractSerializer(XmlDictionaryString, XmlDictionaryString) |
Inicializuje novou instanci NetDataContractSerializer třídy se dvěma parametry typu XmlDictionaryString , které obsahují kořenový prvek a obor názvů použitý k určení obsahu. |
Vlastnosti
| Name | Description |
|---|---|
| AssemblyFormat |
Získá hodnotu, která určuje metodu pro vyhledání a načítání sestavení. |
| Binder |
Získá nebo nastaví objekt, který řídí načítání třídy. |
| Context |
Získá nebo nastaví objekt, který umožňuje předávání kontextových dat, které jsou užitečné při serializaci nebo deserializaci. |
| IgnoreExtensionDataObject |
Získá hodnotu, která určuje, zda jsou data zadaná rozšířením objektu ignorována. |
| MaxItemsInObjectGraph |
Získá maximální počet položek povolených v objektu, který má být serializován. |
| SurrogateSelector |
Získá nebo nastaví objekt, který pomáhá formátovací modul při výběru náhradní pro serializace. |
Metody
| Name | Description |
|---|---|
| Deserialize(Stream) |
Deserializuje dokument XML nebo streamuje do objektu. |
| Equals(Object) |
Určuje, zda je zadaný objekt roven aktuálnímu objektu. (Zděděno od Object) |
| GetHashCode() |
Slouží jako výchozí funkce hash. (Zděděno od Object) |
| GetType() |
Získá Type aktuální instance. (Zděděno od Object) |
| IsStartObject(XmlDictionaryReader) |
Určuje, zda je umístěn XmlDictionaryReader na objektu, který lze deserializovat pomocí zadané čtečky. |
| IsStartObject(XmlReader) |
Určuje, zda je umístěn XmlReader na objektu, který lze deserializovat pomocí zadané čtečky. |
| MemberwiseClone() |
Vytvoří mělkou kopii aktuálního Object. (Zděděno od Object) |
| ReadObject(Stream) |
Načte datový proud XML nebo dokument s deserializovaným objektem Stream a vrátí. (Zděděno od XmlObjectSerializer) |
| ReadObject(XmlDictionaryReader, Boolean) |
Načte datový proud XML nebo dokument s deserializovaným objektem XmlDictionaryReader a také zkontroluje, zda data objektu odpovídají názvu a oboru názvů použitému k vytvoření serializátoru. |
| ReadObject(XmlDictionaryReader) |
Přečte dokument XML nebo datový proud s deserializovaným objektem XmlDictionaryReader a vrátí deserializovaný objekt. (Zděděno od XmlObjectSerializer) |
| ReadObject(XmlReader, Boolean) |
Načte datový proud XML nebo dokument s deserializovaným objektem XmlDictionaryReader a také zkontroluje, zda data objektu odpovídají názvu a oboru názvů použitému k vytvoření serializátoru. |
| ReadObject(XmlReader) |
Načte datový proud XML nebo dokument s deserializovaným objektem XmlDictionaryReader a vrátí ho. |
| Serialize(Stream, Object) |
Serializuje zadaný objektový graf pomocí zadaného zapisovače. |
| ToString() |
Vrátí řetězec, který představuje aktuální objekt. (Zděděno od Object) |
| WriteEndObject(XmlDictionaryWriter) |
Zapíše zavírací element XML pomocí znaku XmlDictionaryWriter. |
| WriteEndObject(XmlWriter) |
Zapíše zavírací element XML pomocí znaku XmlWriter. |
| WriteObject(Stream, Object) |
Zapíše úplný obsah (začátek, obsah a konec) objektu do dokumentu XML nebo datového proudu se zadaným Stream. (Zděděno od XmlObjectSerializer) |
| WriteObject(XmlDictionaryWriter, Object) |
Zapíše úplný obsah (začátek, obsah a konec) objektu do dokumentu XML nebo datového proudu se zadaným XmlDictionaryWriter. (Zděděno od XmlObjectSerializer) |
| WriteObject(XmlWriter, Object) |
Zapíše úplný obsah (začátek, obsah a konec) objektu do dokumentu XML nebo datového proudu se zadaným XmlWriter. |
| WriteObjectContent(XmlDictionaryWriter, Object) |
Zapíše obsah XML pomocí .XmlDictionaryWriter |
| WriteObjectContent(XmlWriter, Object) |
Zapíše obsah XML pomocí .XmlWriter |
| WriteStartObject(XmlDictionaryWriter, Object) |
Zapíše levý element XML pomocí znaku XmlDictionaryWriter. |
| WriteStartObject(XmlWriter, Object) |
Zapíše levý element XML pomocí znaku XmlWriter. |