XmlAttributes.XmlDefaultValue Eigenschaft
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Ruft den Standardwert eines XML-Elements oder -Attributs ab oder legt diesen fest.
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
Eigenschaftswert
Ein Object, das den Standardwert eines XML-Elements oder -Attributs darstellt.
Beispiele
Das folgende Beispiel zeigt eine Klasse namens Pet
"Dog", die ein Feld enthält, das einen Standardwert auf "Dog" festgelegt hat. Das Beispiel erstellt jedoch auch ein XmlAttributes Objekt und legt seine XmlDefaultValue Eigenschaft auf einen neuen Standardwert ("Cat") fest. Dadurch wird der ursprüngliche Standardwert außer Kraft gesetzt. Wenn der Feldwert daher auf "Cat" festgelegt ist, behandelt er XmlSerializer ihn als Standardwert und nicht als Serialisierung. Wenn er auf einen anderen Wert festgelegt ist, wird der XmlSerializer Wert serialisiert.
#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
Hinweise
Sie können den Standardwert eines XML-Elements oder XML-Attributs angeben, indem Sie ein DefaultValueAttribute Element anwenden. Um das Ergebnis der Anwendung des Werts zu untersuchen, kompilieren Sie die Anwendung in eine DLL oder ausführbare Datei, und übergeben Sie die resultierende Datei als Argument an das XML-Schemadefinitionstool (XSD.exe). Im XML-Schemadokument wird dem default
Attribut ein Standardwert zugewiesen. Im folgenden Beispiel lautet der Standardwert für das <Animal> Element "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>
Wenn Sie den Standardwert außer Kraft setzen möchten, erstellen Sie einen Object Wert, und weisen Sie ihn dem XmlDefaultValueWert zu.
Wenn der wert, der einem Feld oder einer Eigenschaft zugewiesen ist, dem Standardwert für dieses Feld oder diese Eigenschaft entspricht, XmlSerializer wird der Wert nicht in die XML-Instanz serialisiert. Dies liegt daran, dass der zugewiesene Wert aus dem XML-Schema wiederhergestellt werden kann. Mit anderen Worten, das Festlegen eines Felds oder einer Eigenschaft auf einen eigenen Standardwert entspricht der Einstellung überhaupt nicht. Wenn für das Feld oder die Eigenschaft kein Wert festgelegt wird, verwendet der XmlSerializer im Schema gefundene Standardwert. In beiden Fällen (festlegen der Eigenschaft auf den Standardwert oder nicht auf die Einstellung überhaupt), enthält die XML-Dokumentinstanz keinen Wert für die Eigenschaft.
Sie können die Klassenkonstruktoren anstelle des Schemas verwenden, um die Standardwerte zuzuweisen. Wenn Sie Xsd.exe verwenden, um klassen aus Schemas zu generieren, können Sie alle Attribute [System.ComponentModel.DefaultValueAttribute("myFieldName")] aus den Klassendateien kommentieren oder entfernen.