Freigeben über


XmlAttributes.XmlDefaultValue-Eigenschaft

Ruft den Standardwert eines XML-Elements oder -Attributs ab oder legt diesen fest.

Namespace: System.Xml.Serialization
Assembly: System.Xml (in system.xml.dll)

Syntax

'Declaration
Public Property XmlDefaultValue As Object
'Usage
Dim instance As XmlAttributes
Dim value As Object

value = instance.XmlDefaultValue

instance.XmlDefaultValue = value
public Object XmlDefaultValue { get; set; }
public:
property Object^ XmlDefaultValue {
    Object^ get ();
    void set (Object^ value);
}
/** @property */
public Object get_XmlDefaultValue ()

/** @property */
public void set_XmlDefaultValue (Object value)
public function get XmlDefaultValue () : Object

public function set XmlDefaultValue (value : Object)

Eigenschaftenwert

Ein Object, das den Standardwert eines XML-Elements oder -Attributs darstellt.

Hinweise

Sie können den Standardwert eines XML-Elements oder eines XML-Attributs angeben, indem Sie einem Member ein DefaultValueAttribute zuweisen. Um das Ergebnis der Wertzuweisung zu prüfen, kompilieren Sie die Anwendung in eine DLL- oder ausführbare Datei und übergeben diese Datei als Argument an das XML Schema Definition-Tool (XSD.exe). Im XML-Schemadokument wird dem default-Attribut ein Standardwert zugewiesen. Im folgenden Beispiel wird für das Element <Animal> als Standard "Dogs" angegeben.

<?xml version="1.0"?>
 <schema attributeFormDefault="qualified" 
 elementFormDefault="qualified" targetNamespace="" 
 xmlns="http://www.w3.org/2000/10/XMLSchema">
   <element name="Pets" nullable="true" type="Pets"/>
   <complexType name="Pets">
     <sequence>
       <element default="Dogs" name="Animal" nullable="true" 
        type="string" minOccurs="0"/>
     </sequence>
   </complexType>
 </schema>

Erstellen Sie zum Überschreiben des Standardwerts ein Object, und weisen Sie dieses XmlDefaultValue zu.

Wenn der einem Feld oder einer Eigenschaft zugewiesene Wert dem Standardwert des Felds oder der Eigenschaft entspricht, wird er von XmlSerializer nicht zur XML-Instanz serialisiert. Der zugewiesene Wert kann ohne eine Serialisierung aus dem XML-Schema wiederhergestellt werden. Das Festlegen eines Felds oder einer Eigenschaft auf den Standardwert wird so behandelt, als ob kein Wert festgelegt wurde. Ebenso verwendet XmlSerializer den im Schema enthaltenen Standardwert immer dann, wenn kein Wert für das Feld oder die Eigenschaft festgelegt wurde. In beiden Fällen (Festlegen des Standardwerts oder keine Wertzuweisung) enthält die Instanz des XML-Dokuments keinen Wert für die Eigenschaft.

Sie können die Klassenkonstruktoren anstelle des Schemas verwenden, um die Standardwerte zuzuweisen. Wenn Sie mit Xsd.exe Klassen aus Schemas generieren, können Sie die [System.ComponentModel.DefaultValueAttribute("myFieldName")]-Attribute in den Klassendateien auskommentieren oder ganz entfernen.

Beispiel

Im folgenden Beispiel enthält die Klasse Pet ein Feld, für das der Standardwert "Dog" angegeben wird. In diesem Beispiel wird jedoch auch ein XmlAttributes-Objekt erstellt und dessen XmlDefaultValue-Eigenschaft auf den neuen Standardwert "Cat" festgelegt. Hierdurch wird der ursprüngliche Standardwert überschrieben. Wenn der Wert des Felds auf "Cat" festgelegt wird, wird dieser Wert von XmlSerializer als Standardwert behandelt und nicht serialisiert. Jeder andere festgelegte Wert wird von XmlSerializer serialisiert.

Imports System
Imports System.IO
Imports System.Xml
Imports System.Xml.Serialization
Imports System.ComponentModel


' This is the class that will be serialized. 
Public Class Pet
    ' The default value for the Animal field is "Dog". 
    <DefaultValueAttribute("Dog")> Public Animal As String 
End Class


Public Class Run
    
    Public Shared Sub Main()
        Dim test As New Run()
        test.SerializeObject("OverrideDefaultValue.xml")
        test.DeserializeObject("OverrideDefaultValue.xml")
    End Sub 'Main
    
    
    ' Return an XmlSerializer used for overriding. 
    Public Function CreateOverrider() As XmlSerializer
        ' Create the XmlAttributeOverrides and XmlAttributes objects. 
        Dim xOver As New XmlAttributeOverrides()
        Dim xAttrs As New XmlAttributes()
        
        ' Add an override for the default value of the GroupName. 
        Dim defaultName As Object = "Cat"
        xAttrs.XmlDefaultValue = defaultName
        
        ' Add all the XmlAttributes to the XmlAttribueOverrides object. 
        xOver.Add(GetType(Pet), "Animal", xAttrs)
        
        ' Create the XmlSerializer and return it.
        Return New XmlSerializer(GetType(Pet), xOver)
    End Function
    
    
    Public Sub SerializeObject(ByVal filename As String)
       ' Create an instance of the XmlSerializer class.
       Dim mySerializer As XmlSerializer = CreateOverrider()
        
       ' Writing the file requires a TextWriter.
       Dim writer As New StreamWriter(filename)
        
       ' Create an instance of the class that will be serialized. 
       Dim myPet As New Pet()
        
       ' Set the Animal property. If you set it to the default value,
       ' which is "Cat" (the value assigned to the XmlDefaultValue
       ' of the XmlAttributes object), no value will be serialized.
       ' If you change the value to any other value (including "Dog"),
       ' the value will be serialized.

      ' The default value "Cat" will be assigned (nothing serialized).
      myPet.Animal = ""
      ' Uncommenting the next line also results in the default 
      ' value because Cat is the default value (not serialized).
      '  myPet.Animal = "Cat"; 
      
      ' Uncomment the next line to see the value serialized:
      ' myPet.Animal = "fish";
      ' This will also be serialized because Dog is not the 
      ' default anymore.
      '  myPet.Animal = "Dog";
       ' Serialize the class, and close the TextWriter.
        mySerializer.Serialize(writer, myPet)
        writer.Close()
    End Sub
    
    
    Public Sub DeserializeObject(ByVal filename As String)
        Dim mySerializer As XmlSerializer = CreateOverrider()
        Dim fs As New FileStream(filename, FileMode.Open)
        Dim myPet As Pet = CType(mySerializer.Deserialize(fs), Pet)
        Console.WriteLine(myPet.Animal)
    End Sub
End Class
using System; 
using System.IO; 
using System.Xml; 
using System.Xml.Serialization; 
using System.ComponentModel; 

// This is the class that will be serialized. 
public class Pet 
{
   // The default value for the Animal field is "Dog". 
   [DefaultValueAttribute("Dog")] 
   public string Animal ; 
} 

public class Run 
{ 
   public static void Main() 
   { 
      Run test = new Run();
      test.SerializeObject("OverrideDefaultValue.xml");
      test.DeserializeObject("OverrideDefaultValue.xml"); 
   }
 
   // Return an XmlSerializer used for overriding. 
   public XmlSerializer CreateOverrider() 
   { 
      // Create the XmlAttributeOverrides and XmlAttributes objects. 
      XmlAttributeOverrides xOver = new XmlAttributeOverrides(); 
      XmlAttributes xAttrs = new XmlAttributes(); 

      // Add an override for the default value of the GroupName. 
      Object defaultAnimal= "Cat";
      xAttrs.XmlDefaultValue = defaultAnimal; 

      // Add all the XmlAttributes to the XmlAttribueOverrides object. 
      xOver.Add(typeof(Pet), "Animal", xAttrs); 

      // Create the XmlSerializer and return it.
      return new XmlSerializer(typeof(Pet), xOver);
   }

   public void SerializeObject(string filename)
   {
      // Create an instance of the XmlSerializer class.
      XmlSerializer mySerializer = CreateOverrider(); 

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

      // Create an instance of the class that will be serialized. 
      Pet myPet = new Pet(); 

      /* Set the Animal property. If you set it to the default value,
         which is "Cat" (the value assigned to the XmlDefaultValue
         of the XmlAttributes object), no value will be serialized.
         If you change the value to any other value (including "Dog"),
         the value will be serialized.
      */
      // The default value "Cat" will be assigned (nothing serialized).
      myPet.Animal= ""; 
      // Uncommenting the next line also results in the default 
      // value because Cat is the default value (not serialized).
      //  myPet.Animal = "Cat"; 
      
      // Uncomment the next line to see the value serialized:
      // myPet.Animal = "fish";
      // This will also be serialized because Dog is not the 
      // default anymore.
      //  myPet.Animal = "Dog";
      // Serialize the class, and close the TextWriter. 
      mySerializer.Serialize(writer, myPet); 
      writer.Close(); 
   } 

   public void DeserializeObject(string filename) 
   {
      XmlSerializer mySerializer = CreateOverrider();
      FileStream fs = new FileStream(filename, FileMode.Open);
      Pet myPet= (Pet)mySerializer.Deserialize(fs);
      Console.WriteLine(myPet.Animal);
   }
}
#using <System.dll>
#using <System.Xml.dll>

using namespace System;
using namespace System::IO;
using namespace System::Xml;
using namespace System::Xml::Serialization;
using namespace System::ComponentModel;

// This is the class that will be serialized. 
public ref class Pet
{
public:

   // The default value for the Animal field is "Dog". 

   [DefaultValueAttribute("Dog")]
   String^ Animal;
};

// Return an XmlSerializer used for overriding. 
XmlSerializer^ CreateOverrider()
{
   // Create the XmlAttributeOverrides and XmlAttributes objects. 
   XmlAttributeOverrides^ xOver = gcnew XmlAttributeOverrides;
   XmlAttributes^ xAttrs = gcnew XmlAttributes;

   // Add an override for the default value of the GroupName. 
   Object^ defaultAnimal = "Cat";
   xAttrs->XmlDefaultValue = defaultAnimal;

   // Add all the XmlAttributes to the XmlAttribueOverrides object. 
   xOver->Add( Pet::typeid, "Animal", xAttrs );

   // Create the XmlSerializer and return it.
   return gcnew XmlSerializer( Pet::typeid,xOver );
}

void SerializeObject( String^ filename )
{
   // Create an instance of the XmlSerializer class.
   XmlSerializer^ mySerializer = CreateOverrider();

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

   // Create an instance of the class that will be serialized. 
   Pet^ myPet = gcnew Pet;

   /* Set the Animal property. If you set it to the default value,
      which is "Cat" (the value assigned to the XmlDefaultValue
      of the XmlAttributes object), no value will be serialized.
      If you change the value to any other value (including "Dog"),
      the value will be serialized.
      */
   // The default value "Cat" will be assigned (nothing serialized).
   myPet->Animal = "";

   // Uncommenting the next line also results in the default 
   // value because Cat is the default value (not serialized).
   //  myPet.Animal = "Cat"; 
   // Uncomment the next line to see the value serialized:
   // myPet.Animal = "fish";
   // This will also be serialized because Dog is not the 
   // default anymore.
   //  myPet.Animal = "Dog";
   // Serialize the class, and close the TextWriter. 
   mySerializer->Serialize( writer, myPet );
   writer->Close();
}

void DeserializeObject( String^ filename )
{
   XmlSerializer^ mySerializer = CreateOverrider();
   FileStream^ fs = gcnew FileStream( filename,FileMode::Open );
   Pet^ myPet = dynamic_cast<Pet^>(mySerializer->Deserialize( fs ));
   Console::WriteLine( myPet->Animal );
}

int main()
{
   SerializeObject( "OverrideDefaultValue.xml" );
   DeserializeObject( "OverrideDefaultValue.xml" );
}
import System.*;
import System.IO.*;
import System.Xml.*;
import System.Xml.Serialization.*;
import System.ComponentModel.*;

// This is the class that will be serialized. 
public class Pet
{
    // The default value for the Animal field is "Dog". 
    /** @attribute DefaultValueAttribute("Dog")
     */
    public String animal;
} //Pet

public class Run
{
    public static void main(String[] args)
    {
        Run test = new Run();
        test.SerializeObject("OverrideDefaultValue.xml");
        test.DeserializeObject("OverrideDefaultValue.xml");
    } //main

    // Return an XmlSerializer used for overriding. 
    public XmlSerializer CreateOverrider()
    {
        // Create the XmlAttributeOverrides and XmlAttributes objects. 
        XmlAttributeOverrides xOver = new XmlAttributeOverrides();
        XmlAttributes xAttrs = new XmlAttributes();

        // Add an override for the default value of the GroupName. 
        Object defaultAnimal = "Cat";
        xAttrs.set_XmlDefaultValue(defaultAnimal);

        // Add all the XmlAttributes to the XmlAttribueOverrides object. 
        xOver.Add(Pet.class.ToType(), "Animal", xAttrs);

        // Create the XmlSerializer and return it.
        return new XmlSerializer(Pet.class.ToType(), xOver);
    } //CreateOverrider

    public void SerializeObject(String fileName)
    {
        // Create an instance of the XmlSerializer class.
        XmlSerializer mySerializer = CreateOverrider();

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

        // Create an instance of the class that will be serialized. 
        Pet myPet = new Pet();

        /* Set the Animal property. If you set it to the default value,
           which is "Cat" (the value assigned to the XmlDefaultValue
           of the XmlAttributes object), no value will be serialized.
           If you change the value to any other value (including "Dog"),
           the value will be serialized.
         */
        // The default value "Cat" will be assigned (nothing serialized).
        myPet.animal = "";

        // Uncommenting the next line also results in the default 
        // value because Cat is the default value (not serialized).
        // myPet.Animal = "Cat";

        // Uncomment the next line to see the value serialized:
        // myPet.Animal = "fish";
        // This will also be serialized because Dog is not the 
        // default anymore.
        // myPet.Animal = "Dog";
        // Serialize the class, and close the TextWriter. 
        mySerializer.Serialize(writer, myPet);
        writer.Close();
    } //SerializeObject

    public void DeserializeObject(String fileName)
    {
        XmlSerializer mySerializer = CreateOverrider();
        FileStream fs = new FileStream(fileName, FileMode.Open);
        Pet myPet = (Pet)mySerializer.Deserialize(fs);
        Console.WriteLine(myPet.animal);
    } //DeserializeObject
} //Run

Plattformen

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile für Pocket PC, Windows Mobile für Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

.NET Compact Framework

Unterstützt in: 2.0

Siehe auch

Referenz

XmlAttributes-Klasse
XmlAttributes-Member
System.Xml.Serialization-Namespace