XmlAttributes.XmlDefaultValue Tulajdonság

Definíció

Lekéri vagy beállítja egy XML-elem vagy attribútum alapértelmezett értékét.

public:
 property System::Object ^ XmlDefaultValue { System::Object ^ get(); void set(System::Object ^ value); };
public object XmlDefaultValue { get; set; }
public object? XmlDefaultValue { get; set; }
member this.XmlDefaultValue : obj with get, set
Public Property XmlDefaultValue As Object

Tulajdonság értéke

Egy Object XML-elem vagy attribútum alapértelmezett értékét jelképező érték.

Példák

Az alábbi példa egy olyan osztályt Pet mutat be, amely egy olyan mezőt tartalmaz, amelynek alapértelmezett értéke "Dog". A példa azonban létrehoz egy XmlAttributes objektumot is, és a tulajdonságát egy új alapértelmezett értékre ("Cat") állítja XmlDefaultValue be. Ez felülbírálja az eredeti alapértelmezett értéket. Így ha a mező értéke "Cat" (Macska) értékre van állítva, akkor az XmlSerializer alapértelmezett értékként kezeli, és nem szerializálja. Ha bármilyen más értékre van állítva, a XmlSerializer szerializálja az értéket.

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 XmlAttributeOverrides 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);
   }
}
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
    
    
    ' 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 XmlAttributeOverrides 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

Megjegyzések

Egy XML-elem vagy XML-attribútum alapértelmezett értékét egy tagra alkalmazva DefaultValueAttribute adhatja meg. Az érték alkalmazásának eredményének vizsgálatához fordítsa le az alkalmazást EGY DLL-fájlba vagy végrehajtható fájlba, és adja át az eredményül kapott fájlt argumentumként az XML-sémadefiníciós eszköznek (XSD.exe). Az XML-sémadokumentumban egy alapértelmezett érték van hozzárendelve az default attribútumhoz. Az alábbi példában az Animal< elem alapértelmezett értéke a >"Kutyák".

<?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>

Az alapértelmezett érték felülbírálásához hozzon létre egy értéket Object , és rendelje hozzá a XmlDefaultValue.

Ha egy mezőhöz vagy tulajdonsághoz rendelt érték megegyezik az adott mező vagy tulajdonság alapértelmezett értékével, az XmlSerializer nem szerializálja az értéket az XML-példányra. Ennek az az oka, hogy a hozzárendelt érték helyreállítható az XML-sémából. Más szóval egy mező vagy tulajdonság saját alapértelmezett értékre állítása egyenértékű azzal, hogy egyáltalán nem állítja be. Hasonlóképpen, ha nincs beállítva érték a mezőhöz vagy tulajdonsághoz, a XmlSerializer séma alapértelmezett értékét használja. Mindkét esetben (a tulajdonság beállítása az alapértelmezett értékre, vagy egyáltalán nem) az XML-dokumentumpéldány nem tartalmaz értéket a tulajdonsághoz.

A séma helyett az osztálykonstruktorokkal rendelheti hozzá az alapértelmezett értékeket. Ha Xsd.exe használatával hoz létre osztályokat sémákból, megjegyzéseket fűzhet az osztályfájlokhoz, vagy eltávolíthatja a [System.ComponentModel.DefaultValueAttribute("myFieldName")] attribútumokat.

A következőre érvényes: