Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Costruttore XmlSerializer (Type, Type[])

 

Data di pubblicazione: ottobre 2016

Inizializza una nuova istanza di XmlSerializer classe che può serializzare gli oggetti del tipo specificato in documenti XML e deserializzare il XML di documenti in un tipo specificato. Se una proprietà o un campo restituisce una matrice, il extraTypes parametro specifica gli oggetti che possono essere inseriti nella matrice.

Spazio dei nomi:   System.Xml.Serialization
Assembly:  System.Xml (in System.Xml.dll)

public XmlSerializer(
	Type type,
	Type[] extraTypes
)

Parametri

type
Type: System.Type

Il tipo dell'oggetto da questo XmlSerializer può essere serializzato.

extraTypes
Type: System.Type[]

Oggetto Type matrice di altri tipi di oggetti da serializzare.

Per impostazione predefinita, se una proprietà pubblica o un campo restituisce un oggetto o una matrice di oggetti, i tipi di oggetti vengono serializzati automaticamente. Tuttavia, se una classe contiene un campo o proprietà che restituisce una matrice di tipo Object, qualsiasi oggetto può essere inserito in una matrice. In tal caso, il XmlSerializer deve prevedere tutti i tipi di oggetto possibili che vengono inseriti le Object matrice. A tale scopo, utilizzare il extraTypes parametro per specificare i tipi di oggetti aggiuntivi da serializzare o deserializzare.

È inoltre possibile utilizzare il extraTypes parametro per specificare i tipi derivati da una classe base. Ad esempio, si supponga che una classe base denominata Phone esiste e una classe denominata InternationalPhone da esso derivato. Utilizzare il extraTypes parametro per specificare anche il tipo derivato.

Nell'esempio seguente viene serializzata un'istanza di una classe che contiene un campo pubblico che restituisce una matrice di oggetti. Il extraTypes del parametro di XmlSerializer costruttore specifica i tipi di oggetti che possono essere serializzati nella matrice.

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

// This defines the object that will be serialized.
public class Teacher
{  
   public string Name;
   public Teacher(){}
   /* Note that the Info field returns an array of objects.
      Any object can be added to the array by adding the
      object type to the array passed to the extraTypes argument. */
   [XmlArray (ElementName = "ExtraInfo", IsNullable = true)]
   public object[] Info;
   public Phone PhoneInfo;
}

// This defines one of the extra types to be included.
public class Address
{  
   public string City;

   public Address(){}
   public Address(string city)
   {
      City = city;
   }

}

// Another extra type to include.
public class Phone
{
   public string PhoneNumber;
   public Phone(){}
   public Phone(string phoneNumber)
   {
      PhoneNumber = phoneNumber;
   }
}

// Another type, derived from Phone
public class InternationalPhone:Phone
{
   public string CountryCode;

   public InternationalPhone(){}

   public InternationalPhone(string countryCode)
   {
      CountryCode = countryCode;
   }
}

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

   private void SerializeObject(string filename)
   {
      // Writing the file requires a TextWriter.
      TextWriter myStreamWriter = new StreamWriter(filename);

      // Create a Type array.
      Type [] extraTypes= new Type[3];
      extraTypes[0] = typeof(Address);
      extraTypes[1] = typeof(Phone);
      extraTypes[2] = typeof(InternationalPhone);

      // Create the XmlSerializer instance.
      XmlSerializer mySerializer = new XmlSerializer
      (typeof(Teacher),extraTypes);

      Teacher teacher = new Teacher();
      teacher.Name = "Mike";
      // Add extra types to the Teacher object
      object [] info = new object[2];
      info[0] = new Address("Springville");
      info[1] = new Phone("555-0100");

      teacher.Info = info;

      teacher.PhoneInfo = new InternationalPhone("000"); 

      mySerializer.Serialize(myStreamWriter,teacher);
      myStreamWriter.Close();
   }

   private void DeserializeObject(string filename)
   {
      // Create a Type array.
      Type [] extraTypes= new Type[3];
      extraTypes[0] = typeof(Address);
      extraTypes[1] = typeof(Phone);
      extraTypes[2] = typeof(InternationalPhone);

      // Create the XmlSerializer instance.
      XmlSerializer mySerializer = new XmlSerializer
      (typeof(Teacher),extraTypes);

      // Reading a file requires a FileStream.
      FileStream fs = new FileStream(filename, FileMode.Open);
      Teacher teacher = (Teacher) mySerializer.Deserialize(fs);

      // Read the extra information.
      Address a = (Address)teacher.Info[0];
      Phone p = (Phone) teacher.Info[1];
      InternationalPhone Ip = 
      (InternationalPhone) teacher.PhoneInfo;

      Console.WriteLine(teacher.Name);
      Console.WriteLine(a.City);
      Console.WriteLine(p.PhoneNumber);
      Console.WriteLine(Ip.CountryCode);
   }
}

Universal Windows Platform
Disponibile da 8
.NET Framework
Disponibile da 1.1
Libreria di classi portabile
Supportato in: piattaforme .NET portabili
Silverlight
Disponibile da 2.0
Windows Phone Silverlight
Disponibile da 7.0
Windows Phone
Disponibile da 8.1
Torna all'inizio
Mostra: