XmlAttributes.XmlDefaultValue Proprietà
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Ottiene o imposta il valore predefinito di un elemento o di un attributo XML.
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
Valore della proprietà
Oggetto Object che rappresenta il valore predefinito di un elemento o di un attributo XML.
Esempio
Nell'esempio seguente viene illustrata una classe denominata Pet che contiene un campo con un valore predefinito impostato su "Dog". Tuttavia, l'esempio crea anche un XmlAttributes oggetto e imposta la relativa XmlDefaultValue proprietà su un nuovo valore predefinito ("Cat"). In questo modo viene eseguito l'override del valore predefinito originale. Pertanto, se il valore del campo è impostato su "Cat", lo XmlSerializer considera come valore predefinito e non serializzarlo. Se è impostato su qualsiasi altro valore, serializza XmlSerializer il valore.
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
Commenti
È possibile specificare il valore predefinito di un elemento XML o di un attributo XML applicando un oggetto DefaultValueAttribute a un membro. Per esaminare il risultato dell'applicazione, compilare l'applicazione in una DLL o un eseguibile e passare il file risultante come argomento allo strumento xml Schema Definition (XSD.exe). Nel documento XML Schema viene assegnato un valore predefinito all'attributo default . Nell'esempio seguente il valore predefinito per l'elemento <Animal> è "Dogs".
<?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>
Per eseguire l'override del valore predefinito, creare un oggetto Object e assegnarlo all'oggetto XmlDefaultValue.
Se il valore assegnato a un campo o a una proprietà è uguale al valore predefinito per tale campo o proprietà, XmlSerializer non serializza il valore nell'istanza XML. Il motivo è che il valore assegnato può essere recuperato da XML Schema. In altre parole, l'impostazione di un campo o di una proprietà sul proprio valore predefinito equivale a non impostarla affatto. Analogamente, se non viene impostato alcun valore per il campo o la proprietà, XmlSerializer usa il valore predefinito trovato nello schema. In entrambi i casi, (impostando la proprietà sul valore predefinito o non impostandola affatto), l'istanza del documento XML non contiene alcun valore per la proprietà .
È possibile usare i costruttori di classe anziché lo schema per assegnare i valori predefiniti. Se si usa Xsd.exe per generare classi dagli schemi, è possibile impostare come commento o rimuovere tutti gli attributi [System.ComponentModel.DefaultValueAttribute("myFieldName")] dai file di classe.