NetDataContractSerializer Osztály
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
Szerializálja és deszerializálja egy típus egy példányát XML-adatfolyamba vagy dokumentumba a megadott .NET típusok használatával. Ez az osztály nem örökölhető.
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
- Öröklődés
- Megvalósítás
Példák
Az alábbi példakód egy, a szerializált típust Person mutatja be.NetDataContractSerializer Az DataContractAttribute attribútum az osztályra lesz alkalmazva, és a rendszer a DataMemberAttribute tagokra (beleértve a magántagokat is) alkalmazza a NetDataContractSerializer szerializálásra vonatkozó utasításra.
// 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
Megjegyzések
Biztonság
NetDataContractSerializer nem biztonságos. További információt a BinaryFormatter biztonsági útmutatójában talál.
NetDataContractSerializer A DataContractSerializer különbség az egyik fontos módszer: a NetDataContractSerializer CLR-típusadatok a szerializált XML-ben, míg a DataContractSerializer nem. Ezért csak NetDataContractSerializer akkor használható, ha a szerializálási és a deszerializálási vége azonos CLR-típussal rendelkezik.
A szerializáló szerializálhatja azokat a típusokat, amelyekre vagy az DataContractAttributeSerializableAttribute attribútumot alkalmazták. Szerializálja a implementálható ISerializabletípusokat is.
A szerializálással kapcsolatos további információkért lásd a szerializálást és a deszerializálást.
Inkompatibilitás az XElementszel
Az XElement osztály XML írására szolgál. A NetDataContractSerializer típuspéldányok azonban nem szerializálhatók. A következő kód ezért kivétellel meghiúsul: a NetDataContractSerializer nem támogatja a legfelső szinten a "System.Xml.Linq.XElement" gyökértípust, mivel az IXmlSerializable tulajdonsággal IsAny=true rendelkezik, és minden tartalmát meg kell írnia, beleértve a gyökérelemet is."
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)
Ha azonban egy XElement osztály mezőjének vagy tulajdonságának típusaként használnak egy mezőt vagy tulajdonságot, a rendszer szerializálja a mező vagy tulajdonság által tartalmazott adatokat. Ennek az az oka, hogy egy osztály tagjaként az adatok nem az osztály legfelső szintjei.
Konstruktorok
| Name | Description |
|---|---|
| NetDataContractSerializer() |
Inicializálja a NetDataContractSerializer osztály új példányát. |
| NetDataContractSerializer(StreamingContext, Int32, Boolean, FormatterAssemblyStyle, ISurrogateSelector) |
Inicializálja az NetDataContractSerializer osztály új példányát a megadott környezeti adatokkal; emellett megadja a szerializálni kívánt objektum elemeinek maximális számát, valamint a paramétereket, amelyek megadják, hogy a rendszer figyelmen kívül hagyja-e a további adatokat, a szerelvénybetöltési módszert és a helyettesítő választót. |
| NetDataContractSerializer(StreamingContext) |
Inicializálja az NetDataContractSerializer osztály új példányát a megadott streamkörnyezeti adatokkal. |
| NetDataContractSerializer(String, String, StreamingContext, Int32, Boolean, FormatterAssemblyStyle, ISurrogateSelector) |
Inicializálja az NetDataContractSerializer osztály új példányát a megadott környezeti adatokkal, gyökérnévvel és névtérrel; emellett megadja a szerializálni kívánt objektum elemeinek maximális számát, valamint a paramétereket, amelyek meghatározzák, hogy a rendszer figyelmen kívül hagyja-e a további adatokat, a szerelvény betöltési módszerét és a helyettesítő választót. |
| NetDataContractSerializer(String, String) |
Inicializálja az osztály új példányát a NetDataContractSerializer megadott XML-gyökérelemmel és névtérrel. |
| NetDataContractSerializer(XmlDictionaryString, XmlDictionaryString, StreamingContext, Int32, Boolean, FormatterAssemblyStyle, ISurrogateSelector) |
Inicializálja az NetDataContractSerializer osztály új példányát a megadott környezeti adatokkal, valamint a gyökérnevet és a névteret (paraméterként XmlDictionaryString ); emellett megadja a szerializálni kívánt objektum elemeinek maximális számát, valamint a paramétereket, amelyek meghatározzák, hogy a rendszer figyelmen kívül hagyja-e a talált extra adatokat, a szerelvénybetöltési módszert és a helyettesítő választót. |
| NetDataContractSerializer(XmlDictionaryString, XmlDictionaryString) |
Inicializálja az NetDataContractSerializer osztály új példányát két olyan típusú XmlDictionaryString paraméterrel, amelyek tartalmazzák a tartalom megadásához használt gyökérelemet és névteret. |
Tulajdonságok
| Name | Description |
|---|---|
| AssemblyFormat |
Olyan értéket kap, amely meghatározza a szerelvények helyének és betöltésének módját. |
| Binder |
Lekéri vagy beállítja az osztálybetöltést vezérlő objektumot. |
| Context |
Lekéri vagy beállítja azt az objektumot, amely lehetővé teszi a szerializálás vagy deszerializálás során hasznos környezeti adatok továbbítását. |
| IgnoreExtensionDataObject |
Olyan értéket kap, amely meghatározza, hogy az objektum kiterjesztése által megadott adatok figyelmen kívül lesznek-e hagyva. |
| MaxItemsInObjectGraph |
A szerializálandó objektumban engedélyezett elemek maximális számát adja meg. |
| SurrogateSelector |
Lekéri vagy beállít egy objektumot, amely segít a formázónak, amikor helyettesítőt választ a szerializáláshoz. |
Metódusok
| Name | Description |
|---|---|
| Deserialize(Stream) |
Deszerializál egy XML-dokumentumot, vagy adatfolyamot továbbít egy objektumba. |
| Equals(Object) |
Meghatározza, hogy a megadott objektum egyenlő-e az aktuális objektummal. (Öröklődés forrása Object) |
| GetHashCode() |
Ez az alapértelmezett kivonatoló függvény. (Öröklődés forrása Object) |
| GetType() |
Lekéri az Type aktuális példányt. (Öröklődés forrása Object) |
| IsStartObject(XmlDictionaryReader) |
Meghatározza, hogy az XmlDictionaryReader objektum egy olyan objektumon van-e elhelyezve, amely a megadott olvasóval deszerializálható. |
| IsStartObject(XmlReader) |
Meghatározza, hogy az XmlReader objektum egy olyan objektumon van-e elhelyezve, amely a megadott olvasóval deszerializálható. |
| MemberwiseClone() |
Az aktuális Objectpéldány sekély másolatát hozza létre. (Öröklődés forrása Object) |
| ReadObject(Stream) |
Beolvassa az XML-adatfolyamot vagy -dokumentumot a Stream deszerializált objektummal, és visszaadja. (Öröklődés forrása XmlObjectSerializer) |
| ReadObject(XmlDictionaryReader, Boolean) |
Beolvassa az XML-adatfolyamot vagy -dokumentumot egy XmlDictionaryReader deszerializált objektummal, és azt is ellenőrzi, hogy az objektumadatok megfelelnek-e a szerializáló létrehozásához használt névnek és névtérnek. |
| ReadObject(XmlDictionaryReader) |
Beolvassa az XML-dokumentumot vagy streamet egy XmlDictionaryReader deszerializált objektummal, és visszaadja azt. (Öröklődés forrása XmlObjectSerializer) |
| ReadObject(XmlReader, Boolean) |
Beolvassa az XML-adatfolyamot vagy -dokumentumot egy XmlDictionaryReader deszerializált objektummal, és azt is ellenőrzi, hogy az objektumadatok megfelelnek-e a szerializáló létrehozásához használt névnek és névtérnek. |
| ReadObject(XmlReader) |
Beolvassa az XML-adatfolyamot vagy -dokumentumot egy XmlDictionaryReader deszerializált objektummal, és visszaadja azt. |
| Serialize(Stream, Object) |
Szerializálja a megadott objektumgráfot a megadott íróval. |
| ToString() |
Az aktuális objektumot jelképező sztringet ad vissza. (Öröklődés forrása Object) |
| WriteEndObject(XmlDictionaryWriter) |
A záró XML-elemet egy XmlDictionaryWriter. |
| WriteEndObject(XmlWriter) |
A záró XML-elemet egy XmlWriter. |
| WriteObject(Stream, Object) |
Az objektum teljes tartalmát (kezdését, tartalmát és végét) a megadott StreamXML-dokumentumba vagy streambe írja. (Öröklődés forrása XmlObjectSerializer) |
| WriteObject(XmlDictionaryWriter, Object) |
Az objektum teljes tartalmát (kezdését, tartalmát és végét) a megadott XmlDictionaryWriterXML-dokumentumba vagy streambe írja. (Öröklődés forrása XmlObjectSerializer) |
| WriteObject(XmlWriter, Object) |
Az objektum teljes tartalmát (kezdését, tartalmát és végét) a megadott XmlWriterXML-dokumentumba vagy streambe írja. |
| WriteObjectContent(XmlDictionaryWriter, Object) |
Az XML-tartalmat egy XmlDictionaryWriter. |
| WriteObjectContent(XmlWriter, Object) |
Az XML-tartalmat egy XmlWriter. |
| WriteStartObject(XmlDictionaryWriter, Object) |
A nyitó XML-elemet egy XmlDictionaryWriter. |
| WriteStartObject(XmlWriter, Object) |
A nyitó XML-elemet egy XmlWriter. |