通过


XmlAttributeOverrides.Add 方法

定义

将对象 XmlAttributes 添加到对象的集合 XmlAttributes 中。

重载

名称 说明
Add(Type, XmlAttributes)

将对象 XmlAttributes 添加到对象的集合 XmlAttributes 中。 该 type 参数指定要由 XmlAttributes 该对象重写的对象。

Add(Type, String, XmlAttributes)

将对象 XmlAttributes 添加到对象的集合 XmlAttributes 中。 该 type 参数指定要重写的对象。 该 member 参数指定被重写的成员的名称。

Add(Type, XmlAttributes)

Source:
XmlAttributeOverrides.cs
Source:
XmlAttributeOverrides.cs
Source:
XmlAttributeOverrides.cs
Source:
XmlAttributeOverrides.cs
Source:
XmlAttributeOverrides.cs

将对象 XmlAttributes 添加到对象的集合 XmlAttributes 中。 该 type 参数指定要由 XmlAttributes 该对象重写的对象。

public:
 void Add(Type ^ type, System::Xml::Serialization::XmlAttributes ^ attributes);
public void Add(Type type, System.Xml.Serialization.XmlAttributes attributes);
member this.Add : Type * System.Xml.Serialization.XmlAttributes -> unit
Public Sub Add (type As Type, attributes As XmlAttributes)

参数

type
Type

Type被重写的对象。

attributes
XmlAttributes

一个 XmlAttributes 表示重写属性的对象。

示例

下面的示例序列化一个名为 Band的类,该类派生自名为的 Orchestra类。 该示例创建一个 XmlRootAttribute 对象,并将其分配给 XmlRoot 对象的 XmlAttributes 属性。 然后,该示例调用 Add 方法将 XmlAttributes 对象添加到 XmlAttributeOverrides 对象。

using System;
using System.IO;
using System.Xml.Serialization;

/* This is the class that will be overridden. The XmlIncludeAttribute
tells the XmlSerializer that the overriding type exists. */

[XmlInclude(typeof(Band))]
public class Orchestra
{
   public Instrument[] Instruments;
}

// This is the overriding class.
public class Band:Orchestra
{
   public string BandName;
}

public class Instrument
{
   public string Name;
}

public class Run
{
    public static void Main()
    {
       Run test = new Run();
       test.SerializeObject("Override.xml");
       test.DeserializeObject("Override.xml");
    }

    public void SerializeObject(string filename)
    {
      /* Each object that is being overridden requires
      an XmlAttributes object. */
      XmlAttributes attrs = new XmlAttributes();

      // An XmlRootAttribute allows overriding the Orchestra class.
      XmlRootAttribute xmlRoot = new XmlRootAttribute();

      // Set the object to the XmlAttribute.XmlRoot property.
      attrs.XmlRoot = xmlRoot;

      // Create an XmlAttributeOverrides object.
      XmlAttributeOverrides attrOverrides =
      new XmlAttributeOverrides();

      // Add the XmlAttributes to the XmlAttributeOverrrides.
      attrOverrides.Add(typeof(Orchestra), attrs);

      // Create the XmlSerializer using the XmlAttributeOverrides.
      XmlSerializer s =
      new XmlSerializer(typeof(Orchestra), attrOverrides);

      // Writing the file requires a TextWriter.
      TextWriter writer = new StreamWriter(filename);

      // Create the object using the derived class.
      Band band = new Band();
      band.BandName = "NewBand";

      // Create an Instrument.
      Instrument i = new Instrument();
      i.Name = "Trumpet";
      Instrument[] myInstruments = {i};
      band.Instruments = myInstruments;

      // Serialize the object.
      s.Serialize(writer,band);
      writer.Close();
   }

   public void DeserializeObject(string filename)
   {
      XmlAttributes attrs = new XmlAttributes();
      XmlRootAttribute attr = new XmlRootAttribute();
      attrs.XmlRoot = attr;
      XmlAttributeOverrides attrOverrides =
         new XmlAttributeOverrides();

      attrOverrides.Add(typeof(Orchestra), "Instruments", attrs);

      XmlSerializer s =
      new XmlSerializer(typeof(Orchestra), attrOverrides);

      FileStream fs = new FileStream(filename, FileMode.Open);

      // Deserialize the Band object.
      Band band = (Band) s.Deserialize(fs);
      Console.WriteLine("Brass:");

      foreach(Instrument i in band.Instruments)
      {
         Console.WriteLine(i.Name);
      }
   }
}
Option Explicit
Option Strict

Imports System.IO
Imports System.Xml.Serialization


' This is the class that will be overridden. The XmlIncludeAttribute
' tells the XmlSerializer that the overriding type exists. 
<XmlInclude(GetType(Band))> _
Public Class Orchestra
    Public Instruments() As Instrument
End Class

' This is the overriding class.
Public Class Band
    Inherits Orchestra
    Public BandName As String
End Class

Public Class Instrument
    Public Name As String
End Class

Public Class Run
    
    Public Shared Sub Main()
        Dim test As New Run()
        test.SerializeObject("Override.xml")
        test.DeserializeObject("Override.xml")
    End Sub    
    
    Public Sub SerializeObject(ByVal filename As String)
        ' Each object that is being overridden requires
        ' an XmlAttributes object. 
        Dim attrs As New XmlAttributes()
        
        ' An XmlRootAttribute allows overriding the Orchestra class.
        Dim xmlRoot As New XmlRootAttribute()
        
        ' Set the object to the XmlAttribute.XmlRoot property.
        attrs.XmlRoot = xmlRoot
        
        ' Create an XmlAttributeOverrides object.
        Dim attrOverrides As New XmlAttributeOverrides()
        
        ' Add the XmlAttributes to the XmlAttributeOverrrides.
        attrOverrides.Add(GetType(Orchestra), attrs)
        
        ' Create the XmlSerializer using the XmlAttributeOverrides.
        Dim s As New XmlSerializer(GetType(Orchestra), attrOverrides)
        
        ' Writing the file requires a TextWriter.
        Dim writer As New StreamWriter(filename)
        
        ' Create the object using the derived class.
        Dim band As New Band()
        band.BandName = "NewBand"
        
        ' Create an Instrument.
        Dim i As New Instrument()
        i.Name = "Trumpet"
        Dim myInstruments() As Instrument = {i}
        band.Instruments = myInstruments
        
        ' Serialize the object.
        s.Serialize(writer, band)
        writer.Close()
    End Sub    
    
    Public Sub DeserializeObject(ByVal filename As String)
        Dim attrs As New XmlAttributes()
        Dim attr As New XmlRootAttribute()
        attrs.XmlRoot = attr
        Dim attrOverrides As New XmlAttributeOverrides()
        
        attrOverrides.Add(GetType(Orchestra), "Instruments", attrs)
        
        Dim s As New XmlSerializer(GetType(Orchestra), attrOverrides)
        
        Dim fs As New FileStream(filename, FileMode.Open)
        
        ' Deserialize the Band object.
        Dim band As Band = CType(s.Deserialize(fs), Band)
        Console.WriteLine("Brass:")
        
        Dim i As Instrument
        For Each i In  band.Instruments
            Console.WriteLine(i.Name)
        Next i
    End Sub
End Class

注解

XmlAttributes 对象包含属性对象的联合,这些对象导致 XmlSerializer 重写其一组对象的默认序列化行为。 根据要重写的特定行为,选择要放置在对象中的 XmlAttributes 属性对象。 例如,默认情况下,将 XmlSerializer 类成员序列化为 XML 元素。 如果希望成员改为序列化为 XM 属性,可以创建一个 XmlAttributeAttribute,将其分配给 XmlAttribute 对象的 XmlAttributes属性,并将该 XmlAttributes 对象添加到 XmlAttributeOverrides 该对象。

使用此重载替代或 XmlRootAttributeXmlTypeAttribute

另请参阅

适用于

Add(Type, String, XmlAttributes)

Source:
XmlAttributeOverrides.cs
Source:
XmlAttributeOverrides.cs
Source:
XmlAttributeOverrides.cs
Source:
XmlAttributeOverrides.cs
Source:
XmlAttributeOverrides.cs

将对象 XmlAttributes 添加到对象的集合 XmlAttributes 中。 该 type 参数指定要重写的对象。 该 member 参数指定被重写的成员的名称。

public:
 void Add(Type ^ type, System::String ^ member, System::Xml::Serialization::XmlAttributes ^ attributes);
public void Add(Type type, string member, System.Xml.Serialization.XmlAttributes attributes);
public void Add(Type type, string member, System.Xml.Serialization.XmlAttributes? attributes);
member this.Add : Type * string * System.Xml.Serialization.XmlAttributes -> unit
Public Sub Add (type As Type, member As String, attributes As XmlAttributes)

参数

type
Type

Type要重写的对象。

member
String

要重写的成员的名称。

attributes
XmlAttributes

一个 XmlAttributes 表示重写属性的对象。

示例

以下示例创建一个 XmlAttributeAttribute 对象,并将其分配给 XmlAttribute 对象的 XmlAttributes 属性。 然后,该示例将 XmlAttributes 对象添加到对象 XmlAttributeOverrides ,然后再创建一个 XmlSerializer

// This is the class that will be serialized.
public class Group
{
   public string GroupName;
   [XmlAttribute]
   public int GroupCode;
}

public class Sample
{
public XmlSerializer CreateOverrider()
{
   // Create an XmlAttributeOverrides object.
   XmlAttributeOverrides xOver = new XmlAttributeOverrides();

   /* Create an XmlAttributeAttribute to override the base class
   object's XmlAttributeAttribute object. Give the overriding object
   a new attribute name ("Code"). */
   XmlAttributeAttribute xAtt = new XmlAttributeAttribute();
   xAtt.AttributeName = "Code";

   /* Create an instance of the XmlAttributes class and set the
   XmlAttribute property to the XmlAttributeAttribute object. */
   XmlAttributes attrs = new XmlAttributes();
   attrs.XmlAttribute = xAtt;

   /* Add the XmlAttributes object to the XmlAttributeOverrides
      and specify the type and member name to override. */
   xOver.Add(typeof(Group), "GroupCode", attrs);

   XmlSerializer xSer = new XmlSerializer(typeof(Group), xOver);
   return xSer;
}
}
' This is the class that will be serialized.
Public Class Group
    Public GroupName As String
    <XmlAttribute()> Public GroupCode As Integer
End Class

Public Class Sample
    
    Public Function CreateOverrider() As XmlSerializer
        ' Create an XmlAttributeOverrides object. 
        Dim xOver As New XmlAttributeOverrides()
        
        ' Create an XmlAttributeAttribute to override the base class
        ' object's XmlAttributeAttribute object. Give the overriding object
        ' a new attribute name ("Code").
        Dim xAtt As New XmlAttributeAttribute()
        xAtt.AttributeName = "Code"
        
        ' Create an instance of the XmlAttributes class and set the
        ' XmlAttribute property to the XmlAttributeAttribute object. 
        Dim attrs As New XmlAttributes()
        attrs.XmlAttribute = xAtt
        
        ' Add the XmlAttributes object to the XmlAttributeOverrides
        ' and specify the type and member name to override. 
        xOver.Add(GetType(Group), "GroupCode", attrs)
        
        Dim xSer As New XmlSerializer(GetType(Group), xOver)
        Return xSer
    End Function
End Class

注解

XmlAttributes 对象包含属性对象的联合,这些对象导致 XmlSerializer 重写其一组对象的默认序列化行为。 根据要重写的特定行为,选择要放置在对象中的 XmlAttributes 属性对象。 例如,默认情况下,将 XmlSerializer 类成员序列化为 XML 元素。 如果希望成员改为序列化为 XML 属性,可以创建一个XmlAttributeAttribute,将其分配给XmlAttribute对象的XmlAttributes属性,并将对象添加到XmlAttributesXmlAttributeOverrides该对象。

尝试重写 XmlElementAttribute、、XmlAttributeAttributeXmlArrayAttributeXmlArrayItemAttributeXmlIgnoreAttribute

另请参阅

适用于