把一个对象序列化为XML片段,并从XML片段中加载对象。
大家帮帮忙,急需代码。

解决方案 »

  1.   

    use classes in Systeml.Xml.Serialization
    seeXML Serialization in the .NET Framework
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnexxml/html/xml01202003.asporhttp://www.devhood.com/tutorials/tutorial_details.aspx?tutorial_id=236
      

  2.   

    ReadAttributeValue方法分析属性值,然后把各个组成的要素分隔开(如把纯文本和实体分开)。你可以用ReadAttributeValue方法的返回值作为循环条件,遍历整个属性值中的要素。既然XmlTextReader类不能处理实体,那么你可以自己写一个用于处理实体的类。下面的代码片断演示了怎么调用一个自定义的处理类:
    while(reader.ReadAttributeValue())
    {
       if (reader.NodeType == XmlNodeType.EntityReference)
    // Resolve the "reader.Name" reference and add
    // the result to a buffer
    buf += YourResolverCode(reader.Name);
       else
        // Just append the value to the buffer
    buf += reader.Value;
    }
    当属性值全部被分析后,ReadAtributeValue方法返回False, 从而结束循环。属性值的最终结果就是全局变量buffer的值了。
    处理XML文本(Text)
    当我们在处理XML标签文本时,如果不能正确的处理,它的错误原因能很快地确定。例如一个字符转换错误,它必然是传输了非XML文本到一个XML数据流中。不是所有在给定的平台中有效的字符都是有效的XML字符。只有在XML规范(www.w3.org/TR/2000/REC-xml-20001006.html)中规定的有效的字符才能安全的用作元素和属性名。
    XmlConvert类提供了把非XML标准的命名转换成标准的XML命名的功能。当标签名中包含有无效的XML字符时,EncodeName 和 DecodeName方法能把它们调整成符合Schema的XML命名。包括SQL Server™ 和Microsoft Office,这些应用程序允许及支持Unicode文档,然而,这些文档中的字符有些也不是有效的XML命名。典型的情况是在你处理数据库中包含空格的列名时。虽然SQL Server允许长列名,但这对XML流来说可能就不是有效的命名。空格会被十六进制代码Invoice_0x0020_Details替代。下面的代码演示了怎么样在程序中获得该字符串:
    XmlConvert.EncodeName("Invoice Details");
    与此相反的方法是DecodeName。该方法把XML文本转换成其原始的格式。要注意的是它只能转换完整的十六进制代码,只有_0x0020_才被当成一个空格,而_0x20_就不是了:
    XmlConvert.DecodeName("Invoice_0x0020_Details");
    在XML文档中的空格即重要也不重要。说它重要,是当它出现在元素的内容中或者它在注释语句中时,它能表示实际意义。例如下面的情况:
     
    <MyNode xml:space="preserve">
    <!-- any space here must be preserved -->
    &#8226;&#8226;&#8226;
    </MyNode>
      

  3.   

    序列化是将对象转换为容易传输的格式的过程。例如,可以序列化一个对象,然后使用 HTTP 通过 Internet 在客户端和服务器之间传输该对象。在另一端,反序列化将从该流重新构造对象。XML 序列化仅将对象的公共字段和属性值序列化为 XML 流。XML 序列化不包括类型信息。例如,如果您有一个存在于 Library 命名空间中的 Book 对象,将不能保证它将会被反序列化为同一类型的对象。注意 XML 序列化不转换方法、索引器、私有字段或只读属性(只读集合除外)。若要序列化对象的所有字段和属性(公共的和私有的),请使用 BinaryFormatter 而不是 XML 序列化。
    XML 序列化中最主要的类是 XmlSerializer 类,它的最重要的方法是 Serialize 和 Deserialize 方法。XmlSerializer 生成的 XML 流符合 WWW 联合会 (www.w3.org) XML 架构定义语言 (XSD) 1.0 建议。另外,生成的数据类型符合标题为“XML Schema Part 2: Datatypes”(XML 架构第二部分:数据类型)的文档。对象中的数据是用编程语言构造(如类、字段、属性、基元类型、数组,甚至 XmlElement 或 XmlAttribute 对象形式的嵌入 XML)来描述的。您可以创建自己的用属性批注的类,或者使用 XML 架构定义工具基于现有 XML 架构 (XSD) 生成类。如果您有 XML 架构,就可运行 XML 架构定义工具生成一组强类型化为架构并用属性批注的类。当序列化这样的类的实例时,生成的 XML 符合 XML 架构。使用这样的类,就可针对容易操作的对象模型进行编程,同时确保生成的 XML 符合 XML 架构。这是使用 .NET 框架中的其他类(如 XmlReader 和 XmlWriter 类)分析和写 XML 流的一种替换方法。(有关使用这些类的更多信息,请参阅使用 .NET 框架中的 XML。)这些类使您可以分析任何 XML 流。与此相反,当需要 XML 流符合已知的 XML 架构时,请使用 XmlSerializer。属性控制由 XmlSerializer 类生成的 XML 流,使您可以设置 XML 流的 XML 命名空间、元素名、属性名等。有关这些属性和它们如何控制 XML 序列化的更多信息,请参阅使用属性控制 XML 序列化。有关那些用于控制生成的 XML 的属性表,请参阅控制 XML 序列化的属性。XmlSerializer 类可进一步序列化对象并生成编码的 SOAP XML 流。生成的 XML 符合标题为“Simple Object Access Protocol (SOAP) 1.1”的 WWW 联合会文档的第 5 节。有关此过程的更多信息,请参阅用 XML 序列化生成 SOAP 消息。有关控制生成的 XML 的属性表,请参阅控制编码的 SOAP 序列化的属性。XmlSerializer 类生成由 XML Web services 创建和传递给 XML Web services 的 SOAP 消息。若要控制 SOAP 消息,可将属性应用于 XML Web services 文件 (.asmx) 中的类、返回值、参数和字段。既可使用在“控制 XML 序列化的属性”中列出的属性,也可使用在“控制编码的 SOAP 序列化的属性”中列出的属性,原因是 XML Web services 可能使用文本样式,也可能使用编码的 SOAP 样式。有关使用属性控制 XML Web services 所生成的 XML 的更多信息,请参阅 XML Web services 的 XML 序列化。有关 SOAP 和 XML Web services 的更多信息,请参阅自定义 SOAP 消息。序列化的简单类
    下面的示例显示一个具有公共字段的简单类:[C#]
    public class OrderForm{
       public DateTime OrderDate;
    }
    当将此类的实例序列化时,该实例可能类似于下面这样:<OrderForm>
       <OrderDate>12/12/01</OrderDate>
    </OrderForm>
    有关序列化的更多示例,请参阅 XML 序列化的示例。可以序列化的项
    使用 XmLSerializer 类,可将下列项序列化。 公共类的公共读/写属性和字段 
    实现 ICollection 或 IEnumerable 的类(请注意,只序列化集合,不序列化公共属性。) 
    XmlElement 对象 
    XmlNode 对象 
    DataSet 对象 
    序列化和反序列化对象
    若要序列化对象,首先创建要序列化的对象并设置它的公共属性和字段。为此,必须确定要用以存储 XML 流的传输格式(作为流还是作为文件)。例如,如果 XML 流必须以永久形式保存,则创建 FileStream 对象。当您反序列化对象时,传输格式确定您将创建流还是文件对象。确定了传输格式之后,就可以根据需要调用 Serialize 或 Deserialize 方法。序列化对象 创建对象并设置它的公共字段和属性。 
    使用该对象的类型构造 XmlSerializer。有关更多信息,请参阅 XmlSerializer 类构造函数。 
    调用 Serialize 方法以生成对象的公共属性和字段的 XML 流表示形式或文件表示形式。下面的示例创建一个文件。 
    MySerializableClass myObject = new MySerializableClass();
    // Insert code to set properties and fields of the object.
    XmlSerializer mySerializer = new 
    XmlSerializer(typeof(MySerializableClass));
    // To write to a file, create a StreamWriter object.
    StreamWriter myWriter = new StreamWriter("myFileName.xml");
    mySerializer.Serialize(myWriter, myObject);
    反序列化对象 使用要反序列化的对象的类型构造 XmlSerializer。 
    调用 Deserialize 方法以产生该对象的副本。在反序列化时,必须将返回的对象强制转换为原始对象的类型,如下面的示例中所示。下面的示例将该对象反序列化为文件,但是也可以将该对象反序列化为流。 
    [C#]
    MySerializableClass myObject;
    // Construct an instance of the XmlSerializer with the type
    // of object that is being deserialized.
    XmlSerializer mySerializer = 
    new XmlSerializer(typeof(MySerializableClass));
    // To read the file, create a FileStream object.
    FileStream myFileStream = 
    new FileStream("myFileName.xml", FileMode.Open);
    // Call the Deserialize method and cast to the object type.
    myObject = (MySerializableClass) 
    mySerializer.Deserialize(myFileStream)
    有关 XML 序列化的更多示例,请参阅 XML 序列化的示例。使用 XML 序列化的好处
    XmlSerializer 类在您将对象序列化为 XML 时为您提供完整而灵活的控制。如果您正在创建 XML Web services,则可以将控制序列化的属性应用于类和成员以确保 XML 输出符合特定的架构。例如,XmlSerializer 使您能够: 指定应将字段或属性编码为特性还是元素。 
    指定要使用的 XML 命名空间。 
    如果字段或属性名不合适,则指定元素或特性的名称。 
    XML 序列化的另一个好处是:只要生成的 XML 流符合给定的架构,则对于所开发的应用程序就没有任何约束。假定有这样一个用于描述图书的架构,它具有标题、作者、出版商和 ISBN 编号元素。您可以开发一个以您所希望的任何方式(例如,作为图书订单,或作为图书清单)处理 XML 数据的应用程序。在任一种情况下,唯一的要求是 XML 流应当符合指定的 XML 架构定义语言 (XSD) 架构。XML 序列化注意事项
    使用 XmlSerializer 类时,应考虑下列情况: 已序列化的数据中仅包含类和数据的形状。不包括类型标识和程序集信息。 
    只能序列化公共属性和字段。如果需要序列化非公共数据,请使用 BinaryFormatter 类而不是 XML 序列化。 
    类必须有一个将由 XmlSerializer 序列化的默认构造函数。 
    不能序列化方法。 
    XmlSerializer 可以以不同方式处理实现 IEnumerable 或 ICollection 的类(条件是这些类满足某些要求)。实现 IEnumerable 的类必须实现带单个参数的公共 Add 方法。Add 方法的参数必须与从 GetEnumerator 方法返回的 IEnumerator.Current 属性所返回的类型一致(多态)。除实现 IEnumerable 外还实现 ICollection 的类(如 CollectionBase)必须有一个取整数的公共 Item 索引属性(在 C# 中为索引器),并且它必须有一个整数类型的公共 Count 属性。Add 方法的参数必须与从 Item 属性返回的类型相同或与该类型的某个基的类型相同。对于实现 ICollection 的类,要序列化的值将从索引 Item 属性检索,而不是通过调用 GetEnumerator 来检索。另外请注意,除返回另一个集合类(实现 ICollection 的集合类)的公共字段之外,将不序列化公共字段和属性。有关示例,请参阅 XML 序列化的示例。
      

  4.   

    使用System.Runtime.Serialization.Formatters.Soap.SoapFormatter类应该也可以嗯