XmlObjectSerializer Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Предоставляет базовый класс, используемый для сериализации объектов в виде XML-потоков или документов. Этот класс является абстрактным.
public ref class XmlObjectSerializer abstract
public abstract class XmlObjectSerializer
type XmlObjectSerializer = class
Public MustInherit Class XmlObjectSerializer
- Наследование
-
XmlObjectSerializer
- Производный
Примеры
В следующем примере показан метод с именем WriteObjectWithInstance , который включает в XmlObjectSerializer себя как параметр. Метод сериализует объект с помощью DataContractSerializer метода или NetDataContractSerializer вызывая WriteObject его.
public class Test
{
private void WriteObjectWithInstance(XmlObjectSerializer xm, Company graph,
string fileName)
{
// Use either the XmlDataContractSerializer or NetDataContractSerializer,
// or any other class that inherits from XmlObjectSerializer to write with.
Console.WriteLine(xm.GetType());
FileStream fs = new FileStream(fileName, FileMode.Create);
XmlDictionaryWriter writer = XmlDictionaryWriter.CreateTextWriter(fs);
xm.WriteObject(writer, graph);
Console.WriteLine("Done writing {0}", fileName);
}
private void Run()
{
// Create the object to write to a file.
Company graph = new Company();
graph.Name = "cohowinery.com";
// Create a DataContractSerializer and a NetDataContractSerializer.
// Pass either one to the WriteObjectWithInstance method.
DataContractSerializer dcs = new DataContractSerializer(typeof(Company));
NetDataContractSerializer ndcs = new NetDataContractSerializer();
WriteObjectWithInstance(dcs, graph, @"datacontract.xml");
WriteObjectWithInstance(ndcs, graph, @"netDatacontract.xml");
}
[DataContract]
public class Company
{
[DataMember]
public string Name;
}
static void Main()
{
try
{
Console.WriteLine("Starting");
Test t = new Test();
t.Run();
Console.WriteLine("Done");
Console.ReadLine();
}
catch (InvalidDataContractException iExc)
{
Console.WriteLine("You have an invalid data contract: ");
Console.WriteLine(iExc.Message);
Console.ReadLine();
}
catch (SerializationException serExc)
{
Console.WriteLine("There is a problem with the instance:");
Console.WriteLine(serExc.Message);
Console.ReadLine();
}
catch (QuotaExceededException qExc)
{
Console.WriteLine("The quota has been exceeded");
Console.WriteLine(qExc.Message);
Console.ReadLine();
}
catch (Exception exc)
{
Console.WriteLine(exc.Message);
Console.WriteLine(exc.ToString());
Console.ReadLine();
}
}
Public Class Test
Private Sub WriteObjectWithInstance(ByVal xm As XmlObjectSerializer, _
ByVal graph As Company, ByVal fileName As String)
' Use either the XmlDataContractSerializer or NetDataContractSerializer,
' or any other class that inherits from XmlObjectSerializer to write with.
Console.WriteLine(xm.GetType())
Dim fs As New FileStream(fileName, FileMode.Create)
Dim writer As XmlDictionaryWriter = XmlDictionaryWriter.CreateTextWriter(fs)
xm.WriteObject(writer, graph)
Console.WriteLine("Done writing {0}", fileName)
End Sub
Private Sub Run()
' Create the object to write to a file.
Dim graph As New Company()
graph.Name = "cohowinery.com"
' Create a DataContractSerializer and a NetDataContractSerializer.
' Pass either one to the WriteObjectWithInstance method.
Dim dcs As New DataContractSerializer(GetType(Company))
Dim ndcs As New NetDataContractSerializer()
WriteObjectWithInstance(dcs, graph, "datacontract.xml")
WriteObjectWithInstance(ndcs, graph, "netDatacontract.xml")
End Sub
<DataContract()> _
Public Class Company
<DataMember()> _
Public Name As String
End Class
Shared Sub Main()
Try
Console.WriteLine("Starting")
Dim t As New Test()
t.Run()
Console.WriteLine("Done")
Console.ReadLine()
Catch iExc As InvalidDataContractException
Console.WriteLine("You have an invalid data contract: ")
Console.WriteLine(iExc.Message)
Console.ReadLine()
Catch serExc As SerializationException
Console.WriteLine("There is a problem with the instance:")
Console.WriteLine(serExc.Message)
Console.ReadLine()
Catch qExc As QuotaExceededException
Console.WriteLine("The quota has been exceeded")
Console.WriteLine(qExc.Message)
Console.ReadLine()
Catch exc As Exception
Console.WriteLine(exc.Message)
Console.WriteLine(exc.ToString())
Console.ReadLine()
End Try
End Sub
End Class
Комментарии
XmlObjectSerializer Расширьте возможности создания собственного сериализатора для сериализации и десериализации объектов. DataContractSerializer Класс и NetDataContractSerializer класс наследуются от XmlObjectSerializer и используются для сериализации и десериализации объектов, соответствующих правилам контракта данных (объекты, созданные с помощью DataContractAttribute и т. дDataMemberAttribute.).
Примечания для тех, кто реализует этот метод
При наследовании XmlObjectSerializerот , необходимо переопределить следующие члены: WriteStartObject(XmlDictionaryWriter, Object), , WriteObjectContent(XmlDictionaryWriter, Object)WriteEndObject(XmlDictionaryWriter). Кроме того, IsStartObjectReadObject необходимо реализовать методы для чтения и десериализации.
Конструкторы
| Имя | Описание |
|---|---|
| XmlObjectSerializer() |
Инициализирует новый экземпляр класса XmlObjectSerializer. |
Методы
| Имя | Описание |
|---|---|
| Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
| GetHashCode() |
Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
| GetType() |
Возвращает Type текущего экземпляра. (Унаследовано от Object) |
| IsStartObject(XmlDictionaryReader) |
Возвращает значение, указывающее, размещается ли XmlDictionaryReader элемент XML, который можно считывать. |
| IsStartObject(XmlReader) |
Возвращает значение, указывающее, размещается ли XmlReader элемент XML, который можно считывать. |
| MemberwiseClone() |
Создает неглубокую копию текущей Object. (Унаследовано от Object) |
| ReadObject(Stream) |
Считывает XML-поток или документ с помощью десериализированного Stream объекта и возвращает десериализированный объект. |
| ReadObject(XmlDictionaryReader, Boolean) |
Считывает XML-поток или документ с XmlDictionaryReader десериализированным объектом и возвращает десериализированный объект. Он также позволяет указать, может ли сериализатор считывать данные перед попыткой его чтения. |
| ReadObject(XmlDictionaryReader) |
Считывает XML-документ или поток с десериализированным XmlDictionaryReader объектом. |
| ReadObject(XmlReader, Boolean) |
Считывает XML-документ или поток с XmlReader десериализированным объектом и возвращает десериализированный объект. Он также позволяет указать, может ли сериализатор считывать данные перед попыткой его чтения. |
| ReadObject(XmlReader) |
Считывает XML-документ или поток с десериализированным XmlReader объектом. |
| ToString() |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |
| WriteEndObject(XmlDictionaryWriter) |
Записывает конец данных объекта в виде закрывающего XML-элемента в XML-документ или поток с помощью XmlDictionaryWriterобъекта. |
| WriteEndObject(XmlWriter) |
Записывает конец данных объекта в виде закрывающего XML-элемента в XML-документ или поток с помощью XmlWriterобъекта. |
| WriteObject(Stream, Object) |
Записывает полное содержимое (начало, содержимое и конец) объекта в XML-документ или поток с указанным Stream. |
| WriteObject(XmlDictionaryWriter, Object) |
Записывает полное содержимое (начало, содержимое и конец) объекта в XML-документ или поток с указанным XmlDictionaryWriter. |
| WriteObject(XmlWriter, Object) |
Записывает полное содержимое (начало, содержимое и конец) объекта в XML-документ или поток с указанным XmlWriter. |
| WriteObjectContent(XmlDictionaryWriter, Object) |
Записывает только содержимое объекта в XML-документ или поток с помощью указанного XmlDictionaryWriter. |
| WriteObjectContent(XmlWriter, Object) |
Записывает только содержимое объекта в XML-документ или поток с указанным XmlWriter. |
| WriteStartObject(XmlDictionaryWriter, Object) |
Записывает начало данных объекта в виде открывающего XML-элемента с помощью указанного XmlDictionaryWriter. |
| WriteStartObject(XmlWriter, Object) |
Записывает начало данных объекта в виде открывающего XML-элемента с помощью указанного XmlWriter. |