XmlObjectSerializer 类

定义

提供用于将对象序列化为 XML 流或文档的基类。 此类为抽象类。

public ref class XmlObjectSerializer abstract
public abstract class XmlObjectSerializer
type XmlObjectSerializer = class
Public MustInherit Class XmlObjectSerializer
继承
XmlObjectSerializer
派生

示例

下面的示例演示一个名为 WriteObjectWithInstance 的方法,它包含一个 XmlObjectSerializer 作为参数。 该方法通过调用 DataContractSerializer 方法来将 NetDataContractSerializerWriteObject 用于对象序列化。

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,并且用于序列化和反序列化符合数据协定规则的对象(使用 DataContractAttributeDataMemberAttribute 创建的对象)。

实施者说明

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)

使用 Stream 读取 XML 流或文档,然后返回反序列化的对象。

ReadObject(XmlDictionaryReader)

使用 XmlDictionaryReader 读取 XML 文档或流,然后返回反序列化的对象。

ReadObject(XmlDictionaryReader, Boolean)

使用 XmlDictionaryReader 读取 XML 流或文档并返回反序列化的对象;它还可用于在序列化器尝试读取数据之前指定它是否可以读取数据。

ReadObject(XmlReader)

使用 XmlReader 读取 XML 文档或流,然后返回反序列化的对象。

ReadObject(XmlReader, Boolean)

使用 XmlReader 读取 XML 文档或流并返回反序列化的对象;它还可用于在序列化器尝试读取数据之前指定它是否可以读取数据。

ToString()

返回表示当前对象的字符串。

(继承自 Object)
WriteEndObject(XmlDictionaryWriter)

使用 XmlDictionaryWriter 将对象数据的结束作为结束 XML 元素写入 XML 文档或流。

WriteEndObject(XmlWriter)

使用 XmlWriter 将对象数据的结束作为结束 XML 元素写入 XML 文档或流。

WriteObject(Stream, Object)

使用指定的 Stream 将对象的完整内容(开始、内容和结束)写入 XML 文档或流。

WriteObject(XmlDictionaryWriter, Object)

使用指定的 XmlDictionaryWriter 将对象的完整内容(开始、内容和结束)写入 XML 文档或流。

WriteObject(XmlWriter, Object)

使用指定的 XmlWriter 将对象的完整内容(开始、内容和结束)写入 XML 文档或流。

WriteObjectContent(XmlDictionaryWriter, Object)

使用指定的 XmlDictionaryWriter 仅将对象的内容写入 XML 文档或流。

WriteObjectContent(XmlWriter, Object)

使用指定的 XmlWriter 仅将对象的内容写入 XML 文档或流。

WriteStartObject(XmlDictionaryWriter, Object)

使用指定的 XmlDictionaryWriter 将对象数据的开始作为开始 XML 元素写入。

WriteStartObject(XmlWriter, Object)

使用指定的 XmlWriter 将对象数据的开始作为开始 XML 元素写入。

适用于

另请参阅