XmlArrayAttribute.Form 屬性

定義

取得或設定值,指出 XmlSerializer 產生的 XML 項目名稱是限定的還是非限定的。

public:
 property System::Xml::Schema::XmlSchemaForm Form { System::Xml::Schema::XmlSchemaForm get(); void set(System::Xml::Schema::XmlSchemaForm value); };
public System.Xml.Schema.XmlSchemaForm Form { get; set; }
member this.Form : System.Xml.Schema.XmlSchemaForm with get, set
Public Property Form As XmlSchemaForm

屬性值

其中一個 XmlSchemaForm 值。 預設值為 XmlSchemaForm.None

範例

下列範例會序列化 類別的 Enterprises 實例。 兩個 XML 元素的本機名稱相同, (Company) 但不同的前置詞。 此範例會將 屬性設定 FormXmlForm.Qualified ,以確保限定名稱發生在 XML 實例中。

#using <System.Xml.dll>
#using <System.dll>

using namespace System;
using namespace System::IO;
using namespace System::Xml;
using namespace System::Xml::Schema;
using namespace System::Xml::Serialization;
public ref class Winery
{
public:
   String^ Name;
};

public ref class VacationCompany
{
public:
   String^ Name;
};

public ref class Enterprises
{
private:
   array<Winery^>^wineries;
   array<VacationCompany^>^companies;

public:

   // Sets the Form property to qualified, and specifies the namespace. 
   [XmlArray(Form=XmlSchemaForm::Qualified,ElementName="Company",
   Namespace="http://www.cohowinery.com")]
   property array<Winery^>^ Wineries 
   {
      array<Winery^>^ get()
      {
         return wineries;
      }
      void set( array<Winery^>^value )
      {
         wineries = value;
      }
   }

   [XmlArray(Form=XmlSchemaForm::Qualified,ElementName="Company",
   Namespace="http://www.treyresearch.com")]
   property array<VacationCompany^>^ Companies 
   {
      array<VacationCompany^>^ get()
      {
         return companies;
      }
      void set( array<VacationCompany^>^value )
      {
         companies = value;
      }
   }
};

int main()
{
   String^ filename = "MyEnterprises.xml";

   // Creates an instance of the XmlSerializer class.
   XmlSerializer^ mySerializer = gcnew XmlSerializer( Enterprises::typeid );

   // Writing file requires a TextWriter.
   TextWriter^ writer = gcnew StreamWriter( filename );

   // Creates an instance of the XmlSerializerNamespaces class.
   XmlSerializerNamespaces^ ns = gcnew XmlSerializerNamespaces;

   // Adds namespaces and prefixes for the XML document instance.
   ns->Add( "winery", "http://www.cohowinery.com" );
   ns->Add( "vacationCompany", "http://www.treyresearch.com" );

   // Creates an instance of the class that will be serialized.
   Enterprises^ myEnterprises = gcnew Enterprises;

   // Creates objects and adds to the array. 
   Winery^ w1 = gcnew Winery;
   w1->Name = "cohowinery";
   array<Winery^>^myWinery = {w1};
   myEnterprises->Wineries = myWinery;
   VacationCompany^ com1 = gcnew VacationCompany;
   com1->Name = "adventure-works";
   array<VacationCompany^>^myCompany = {com1};
   myEnterprises->Companies = myCompany;

   // Serializes the class, and closes the TextWriter.
   mySerializer->Serialize( writer, myEnterprises, ns );
   writer->Close();
}

void ReadEnterprises( String^ filename )
{
   XmlSerializer^ mySerializer = gcnew XmlSerializer( Enterprises::typeid );
   FileStream^ fs = gcnew FileStream( filename,FileMode::Open );
   Enterprises^ myEnterprises = dynamic_cast<Enterprises^>(mySerializer->Deserialize( fs ));
   for ( int i = 0; i < myEnterprises->Wineries->Length; i++ )
   {
      Console::WriteLine( myEnterprises->Wineries[ i ]->Name );
   }
   for ( int i = 0; i < myEnterprises->Companies->Length; i++ )
   {
      Console::WriteLine( myEnterprises->Companies[ i ]->Name );
   }
}
using System;
using System.IO;
using System.Xml;
using System.Xml.Schema;
using System.Xml.Serialization;

public class Enterprises
{
   private Winery[] wineries;
   private VacationCompany[] companies;
   // Sets the Form property to qualified, and specifies the namespace.
   [XmlArray(Form = XmlSchemaForm.Qualified, ElementName="Company",
   Namespace="http://www.cohowinery.com")]
   public Winery[] Wineries{
      get{return wineries;}
      set{wineries = value;}
   }

   [XmlArray(Form = XmlSchemaForm.Qualified, ElementName = "Company",
   Namespace = "http://www.treyresearch.com")]
   public VacationCompany [] Companies{
      get{return companies;}
      set{companies = value;}
   }
}

public class Winery
{
   public string Name;
}

public class VacationCompany{
   public string Name;
}

public class Run
{
   public static void Main()
   {
      Run test = new Run();
      test.WriteEnterprises("MyEnterprises.xml");
    }

   public void WriteEnterprises(string filename)
   {
      // Creates an instance of the XmlSerializer class.
      XmlSerializer mySerializer =
      new XmlSerializer(typeof(Enterprises));
      // Writing file requires a TextWriter.
      TextWriter writer = new StreamWriter(filename);

      // Creates an instance of the XmlSerializerNamespaces class.
      XmlSerializerNamespaces ns = new XmlSerializerNamespaces();

      // Adds namespaces and prefixes for the XML document instance.
      ns.Add("winery", "http://www.cohowinery.com");
      ns.Add("vacationCompany", "http://www.treyresearch.com");

      // Creates an instance of the class that will be serialized.
      Enterprises myEnterprises = new Enterprises();

      // Creates objects and adds to the array.
      Winery w1= new Winery();
      w1.Name = "cohowinery";
      Winery[]myWinery = {w1};
      myEnterprises.Wineries = myWinery;

      VacationCompany com1 = new VacationCompany();
      com1.Name = "adventure-works";
      VacationCompany[] myCompany = {com1};
      myEnterprises.Companies = myCompany;

      // Serializes the class, and closes the TextWriter.
      mySerializer.Serialize(writer, myEnterprises, ns);
      writer.Close();
   }

   public void ReadEnterprises(string filename)
   {
      XmlSerializer mySerializer =
      new XmlSerializer(typeof(Enterprises));
      FileStream fs = new FileStream(filename, FileMode.Open);
      Enterprises myEnterprises = (Enterprises)
      mySerializer.Deserialize(fs);

      for(int i = 0; i < myEnterprises.Wineries.Length;i++)
      {
         Console.WriteLine(myEnterprises.Wineries[i].Name);
      }
      for(int i = 0; i < myEnterprises.Companies.Length;i++)
      {
         Console.WriteLine(myEnterprises.Companies[i].Name);
      }
   }
}
Imports System.IO
Imports System.Xml
Imports System.Xml.Schema
Imports System.Xml.Serialization



Public Class Enterprises
    Private mywineries() As Winery
    Private mycompanies() As VacationCompany
    ' Sets the Form property to qualified, and specifies the Namespace. 
    
    <XmlArray(Form := XmlSchemaForm.Qualified, _
        ElementName := "Company", _
        Namespace := "http://www.cohowinery.com")> _
    Public Property Wineries() As Winery()
        
        Get
            Return mywineries
        End Get
        Set
            mywineries = value
        End Set
    End Property 
    
    <XmlArray(Form := XmlSchemaForm.Qualified, _
        ElementName := "Company", _
        Namespace := "http://www.treyresearch.com")> _ 
    Public Property Companies() As VacationCompany()
        
        Get
            Return mycompanies
        End Get
        Set
            mycompanies = value
        End Set
    End Property
End Class
 
Public Class Winery
    Public Name As String
End Class


Public Class VacationCompany
    Public Name As String
End Class


Public Class Run
    
    Public Shared Sub Main()
        Dim test As New Run()
        test.WriteEnterprises("MyEnterprises.xml")
    End Sub
    
    
    Public Sub WriteEnterprises(filename As String)
        ' Creates an instance of the XmlSerializer class.
        Dim mySerializer As New XmlSerializer(GetType(Enterprises))
        ' Writing a file requires a TextWriter.
        Dim writer As New StreamWriter(filename)
        
        ' Creates an instance of the XmlSerializerNamespaces class.
        Dim ns As New XmlSerializerNamespaces()
        
        ' Adds namespaces and prefixes for the XML document instance.
        ns.Add("winery", "http://www.cohowinery.com")
        ns.Add("vacationCompany", "http://www.treyresearch.com")
        
        ' Creates an instance of the class that will be serialized.
        Dim myEnterprises As New Enterprises()
        
        ' Creates objects and adds to the array. 
        Dim w1 As New Winery()
        w1.Name = "cohowinery"
        Dim myWinery(0) As Winery
        myWinery(0) = w1
        myEnterprises.Wineries = myWinery
        
        Dim com1 As New VacationCompany()
        com1.Name = "adventure-works"
        Dim myCompany(0) As VacationCompany
        myCompany(0) = com1
        myEnterprises.Companies = myCompany
        
        ' Serializes the class, and closes the TextWriter.
        mySerializer.Serialize(writer, myEnterprises, ns)
        writer.Close()
    End Sub
    
    
    Public Sub ReadEnterprises(filename As String)
        Dim mySerializer As New XmlSerializer(GetType(Enterprises))
        Dim fs As New FileStream(filename, FileMode.Open)
        Dim myEnterprises As Enterprises = CType(mySerializer.Deserialize(fs), Enterprises)
        
        Dim i As Integer
        For i = 0 To myEnterprises.Wineries.Length - 1
            Console.WriteLine(myEnterprises.Wineries(i).Name)
        Next i
        For i = 0 To myEnterprises.Companies.Length - 1
            Console.WriteLine(myEnterprises.Companies(i).Name)
        Next i
    End Sub
End Class

備註

屬性 Form 會決定 XML 專案名稱是限定還是不限定。 屬性 Form 符合標題為 XML 命名空間的 1999 World Wide Web 聯盟檔。

Namespace如果屬性設定為任何值,則嘗試將 屬性設定 FormXmlSchemaForm.Unqualified 擲回例外狀況。

預設設定 XmlSchemaForm.None 會指示 XmlSerializer 檢查 XML 檔的架構,以判斷命名空間是否限定。 如果架構未指定個別專案或屬性的值,則會 XmlSerializer 使用 elementFormDefaultattributeFormDefault 值來判斷專案或屬性是否限定。 下列 XML 程式碼顯示架構:

<schema elementFormDefault="qualified"   
attributeFormDefault="unqualified"... >  
   <element name="Name"/>  
   <attribute name="Number"/>  
</schema>  

XmlSerializer當 讀取架構時, NameFormNumber 的值都是 XmlSchemaForm.None ,但元素是限定的,而 NameNumber 元素則不限定。

適用於

另請參閱