XmlAttributes.XmlDefaultValue Propriedade
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Obtém ou define o valor padrão de um elemento ou atributo 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
Valor de Propriedade
E Object que representa o valor padrão de um elemento ou atributo XML.
Exemplos
O exemplo seguinte mostra uma classe nomeada Pet que contém um campo cujo valor padrão está definido como "Cão". No entanto, o exemplo também cria um XmlAttributes objeto e define a sua XmlDefaultValue propriedade para um novo valor padrão ("Cat"). Isto sobrepõe-se ao valor padrão original. Assim, se o valor do campo for definido para "Cat", o XmlSerializer campo é tratado como o valor padrão e não o serializa. Se for definido para qualquer outro valor, o XmlSerializer valor serializa-se.
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
Observações
Pode especificar o valor padrão de um elemento XML ou atributo XML aplicando a DefaultValueAttribute a um membro. Para examinar o resultado da aplicação do valor, compile a aplicação numa DLL ou executável, e passe o ficheiro resultante como argumento para a ferramenta XML Schema Definition (XSD.exe). No documento de esquema XML, é atribuído um valor por defeito ao default atributo. No exemplo seguinte, o padrão para o <elemento Animal> é "Cães."
<?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>
Para sobrescrever o valor padrão, crie um Object e atribua-o ao XmlDefaultValue.
Se o valor atribuído a um campo ou propriedade for igual ao valor padrão desse campo ou propriedade, o XmlSerializer não serializa o valor para a instância XML. Isto porque o valor atribuído pode ser recuperado a partir do esquema XML. Ou seja, definir um campo ou propriedade para o seu próprio valor padrão é equivalente a não o definir de todo. Da mesma forma, se não for definido nenhum valor para o campo ou propriedade, utiliza XmlSerializer o valor padrão encontrado no esquema. Em ambos os casos, (definir a propriedade para o seu padrão, ou não a definir de todo), a instância do documento XML não contém qualquer valor para a propriedade.
Podes usar os construtores de classes em vez do esquema para atribuir os valores padrão. Se estiver a usar Xsd.exe para gerar classes a partir de esquemas, pode comentar ou remover todos os atributos [System.ComponentModel.DefaultValueAttribute("myFieldName")] dos ficheiros de classe.