XmlAnyElementAttribute.Name Свойство

Определение

Возвращает или задает имя XML-элемента.

public string Name { get; set; }

Значение свойства

Имя элемента XML.

Исключения

Имя элемента члена массива не соответствует имени элемента, указанному свойством Name.

Примеры

using System;
using System.Text;
using System.IO;
using System.Xml.Serialization;
using System.Xml;
using System.Xml.Schema;

[XmlRoot(Namespace = "http://www.cohowinery.com")]
public class Group{
   public string GroupName;

   // This is for serializing Employee elements.
   [XmlAnyElement(Name = "Employee")]
   public XmlElement[] UnknownEmployees;

   // This is for serializing City elements.   
   [XmlAnyElement
   (Name = "City", 
   Namespace = "http://www.cpandl.com")]
   public XmlElement[] UnknownCity;

    // This one is for all other unknown elements.
   [XmlAnyElement]
   public XmlElement[] UnknownElements;
}

public class Test{
   static void Main(){
      Test t = new Test();
      t.SerializeObject("AnyElementArray.xml");
      t.DeserializeObject("AnyElementArray.xml");
      Console.WriteLine("Done");
   }

   private void SerializeObject(string filename){
      XmlSerializer ser = new XmlSerializer(typeof(Group));
      // Create an XmlNamespaces to use.
      XmlSerializerNamespaces namespaces =
      new XmlSerializerNamespaces();
      namespaces.Add("c", "http://www.cohowinery.com");
      namespaces.Add("i", "http://www.cpandl.com");
      Group myGroup = new Group();
      // Create arrays of arbitrary XmlElement objects.
      // First create an XmlDocument, used to create the 
      // XmlElement objects.
      XmlDocument xDoc = new XmlDocument();

      // Create an array of Employee XmlElement objects.
      XmlElement El1 = xDoc.CreateElement("Employee", "http://www.cohowinery.com");
      El1.InnerText = "John";
      XmlElement El2 = xDoc.CreateElement("Employee", "http://www.cohowinery.com");
      El2.InnerText = "Joan";
      XmlElement El3 = xDoc.CreateElement("Employee", "http://www.cohowinery.com");
      El3.InnerText = "Jim";
      myGroup.UnknownEmployees= new XmlElement[]{El1, El2, El3};     
    
      // Create an array of City XmlElement objects.
      XmlElement inf1 = xDoc.CreateElement("City", "http://www.cpandl.com");
      inf1.InnerText = "Tokyo";
      XmlElement inf2 = xDoc.CreateElement("City", "http://www.cpandl.com");     
      inf2.InnerText = "New York";
      XmlElement inf3 = xDoc.CreateElement("City", "http://www.cpandl.com");     
      inf3.InnerText = "Rome";

      myGroup.UnknownCity = new XmlElement[]{inf1, inf2, inf3};

      XmlElement xEl1 = xDoc.CreateElement("bld");
      xEl1.InnerText = "42";
      XmlElement xEl2 = xDoc.CreateElement("Region");
      xEl2.InnerText = "West";
      XmlElement xEl3 = xDoc.CreateElement("type");
      xEl3.InnerText = "Technical";
      myGroup.UnknownElements = 
        new XmlElement[]{xEl1,xEl2,xEl3};
      // Serialize the class, and close the TextWriter.
      TextWriter writer = new StreamWriter(filename);
      ser.Serialize(writer, myGroup, namespaces);
      writer.Close();
   }

   private void DeserializeObject(string filename){
      XmlSerializer ser = new XmlSerializer(typeof(Group));
      FileStream fs = new FileStream(filename, FileMode.Open);
      Group myGroup;
      myGroup = (Group)ser.Deserialize(fs);
      fs.Close();
      foreach(XmlElement xEmp in myGroup.UnknownEmployees){
         Console.WriteLine(xEmp.LocalName + ": " + xEmp.InnerText);}
      foreach(XmlElement xCity in myGroup.UnknownCity){
         Console.WriteLine(xCity.LocalName + ": " + xCity.InnerText);}
      foreach(XmlElement xEl in myGroup.UnknownElements){
         Console.WriteLine(xEl.LocalName + ": " + xEl.InnerText);}
   }
 }

Комментарии

Если при применении атрибута Name указать значение свойства, все XmlElement объекты или XmlNode , вставляемые в массив, должны иметь одинаковое имя элемента и пространство имен по умолчанию, в противном случае возникает исключение. Если задано Namespace значение свойства, необходимо также задать Name свойство , а XmlElement объекты или XmlNode также должны иметь одинаковые значения имени и пространства имен. Если значение не Name указано, XmlElement объекты или XmlNode могут иметь любое имя элемента.

При вызове Deserialize метода класса все атрибуты, не имеющие соответствующего члена в десериализуемом XmlSerializer объекте, собираются в массиве . Если указать Name значение, массив будет содержать только XML-элементы с таким именем. Если значение не указано Name , массив будет содержать все элементы, не имеющие соответствующего члена в классе . Если класс содержит несколько полей, к которым применяется атрибут, используйте Name свойства и Namespace , чтобы различать содержимое массивов. Если такой класс (с несколькими полями) также содержит одно поле, для которого во время десериализации не заданы различные значения свойств (т Name . е. и Namespace), массив содержит все XML-элементы, которые еще не содержатся в других массивах. При добавлении нескольких полей, для которых не задано различающееся Name значение или Namespace значение, последнее поле класса содержит все неизвестные элементы, которые еще не содержатся в других массивах, а всем остальным полям присваивается значение null.

К члену XmlAnyElementAttribute класса можно применить несколько экземпляров , но каждый экземпляр должен иметь отдельное Name значение свойства. Или, если для каждого экземпляра задано одно и то же Name свойство, для каждого экземпляра должно быть задано отдельное Namespace значение свойства.

Применяется к

Продукт Версии
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1
UWP 10.0