XmlAttributes.XmlDefaultValue Właściwość

Definicja

Pobiera lub ustawia wartość domyślną elementu XML lub atrybutu.

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

Wartość właściwości

Object

Element Object reprezentujący wartość domyślną elementu XML lub atrybutu.

Przykłady

W poniższym przykładzie pokazano klasę o nazwie Pet zawierającą pole z wartością domyślną ustawioną na "Dog". Jednak w przykładzie tworzony jest XmlAttributes również obiekt i ustawia jego XmlDefaultValue właściwość na nową wartość domyślną ("Cat"). Spowoduje to zastąpienie oryginalnej wartości domyślnej. W związku z tym, jeśli wartość pola jest ustawiona na "Cat", XmlSerializer traktuje ją jako wartość domyślną, a nie serializację. Jeśli jest ustawiona na dowolną inną wartość, XmlSerializer serializuje wartość.

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

Uwagi

Możesz określić wartość domyślną elementu XML lub atrybutu XML, stosując element DefaultValueAttribute członkowski. Aby sprawdzić wynik zastosowania wartości, skompiluj aplikację do biblioteki DLL lub pliku wykonywalnego i przekaż wynikowy plik jako argument do narzędzia definicji schematu XML (XSD.exe). W dokumencie schematu XML do atrybutu jest przypisywana wartość domyślna default . W poniższym przykładzie wartość domyślna dla <Animal> elementu to "Psy".

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

Aby zastąpić wartość domyślną, utwórz element Object i przypisz go do elementu XmlDefaultValue.

Jeśli wartość przypisana do pola lub właściwości jest równa wartości domyślnej dla tego pola lub właściwości, XmlSerializer parametr nie serializuje wartości w wystąpieniu XML. Jest to spowodowane tym, że przypisaną wartość można odzyskać ze schematu XML. Innymi słowy, ustawienie pola lub właściwości na własną wartość domyślną jest równoważne, że w ogóle go nie ustawia. Podobnie, jeśli dla pola lub właściwości nie ustawiono żadnej wartości, XmlSerializer zostanie użyta wartość domyślna znaleziona w schemacie. W obu przypadkach (ustawienie właściwości na wartość domyślną lub nie ustawienie jej w ogóle) wystąpienie dokumentu XML nie zawiera żadnej wartości właściwości.

Możesz użyć konstruktorów klas zamiast schematu, aby przypisać wartości domyślne. Jeśli używasz Xsd.exe do generowania klas ze schematów, możesz oznaczyć jako komentarz lub usunąć wszystkie atrybuty [System.ComponentModel.DefaultValueAttribute("myFieldName")] z plików klas.

Dotyczy