SoapAttributes.SoapDefaultValue Свойство
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Получает или задает значение по умолчанию XML-элемента или атрибута.
public:
property System::Object ^ SoapDefaultValue { System::Object ^ get(); void set(System::Object ^ value); };
public object? SoapDefaultValue { get; set; }
public object SoapDefaultValue { get; set; }
member this.SoapDefaultValue : obj with get, set
Public Property SoapDefaultValue As Object
Значение свойства
Объект, представляющий значение по умолчанию XML-элемента или атрибута.
Примеры
В следующем примере сериализуется класс с именем Group
, который включает поле с именем GroupName
. Значение по умолчанию задается в параметре DefaultValueAttribute .NET. Если не задать поле или задать для него значение .NET, значение не сериализуется (так как значение по умолчанию уже известно). В примере также переопределяется значение по умолчанию в методе CreateOverrideSerializer
, которое вызывается методом SerializeOverride
. В примере вызываются оба метода, SerializeOriginal
а SerializeOverride
также задаются одинаковые значения (".NET") для GroupName
поля. Из-за переопределения значение сериализуется только при вызове SerializeOverride
метода.
#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::Xml::Schema;
using namespace System::ComponentModel;
public ref class Group
{
public:
// The default is set to .NET.
[DefaultValue(".NET")]
String^ GroupName;
};
public ref class Run
{
public:
void SerializeOriginal( String^ filename )
{
// Create an instance of the XmlSerializer class.
XmlSerializer^ mySerializer = gcnew XmlSerializer( Group::typeid );
// Writing the file requires a TextWriter.
TextWriter^ writer = gcnew StreamWriter( filename );
// Create an instance of the class that will be serialized.
Group^ myGroup = gcnew Group;
// Setting the GroupName to '.NET' is like not setting it at all
// because it is the default value. So no value will be
// serialized, and on deserialization it will appear as a blank.
myGroup->GroupName = ".NET";
// Serialize the class, and close the TextWriter.
mySerializer->Serialize( writer, myGroup );
writer->Close();
}
void SerializeOverride( String^ filename )
{
// Create an instance of the XmlSerializer class
// that overrides the serialization.
XmlSerializer^ overRideSerializer = CreateOverrideSerializer();
// Writing the file requires a TextWriter.
TextWriter^ writer = gcnew StreamWriter( filename );
// Create an instance of the class that will be serialized.
Group^ myGroup = gcnew Group;
// The specifies that the default value is now
// 'Team1'. So setting the GroupName to '.NET' means
// the value will be serialized.
myGroup->GroupName = ".NET";
// Serialize the class, and close the TextWriter.
overRideSerializer->Serialize( writer, myGroup );
writer->Close();
}
void DeserializeOriginal( String^ filename )
{
// Create an instance of the XmlSerializer class.
XmlSerializer^ mySerializer = gcnew XmlSerializer( Group::typeid );
// Reading the file requires a TextReader.
TextReader^ reader = gcnew StreamReader( filename );
// Deserialize and cast the Object*.
Group^ myGroup;
myGroup = safe_cast<Group^>(mySerializer->Deserialize( reader ));
Console::WriteLine( myGroup->GroupName );
Console::WriteLine();
}
void DeserializeOverride( String^ filename )
{
// Create an instance of the XmlSerializer class.
XmlSerializer^ overRideSerializer = CreateOverrideSerializer();
// Reading the file requires a TextReader.
TextReader^ reader = gcnew StreamReader( filename );
// Deserialize and cast the Object*.
Group^ myGroup;
myGroup = safe_cast<Group^>(overRideSerializer->Deserialize( reader ));
Console::WriteLine( myGroup->GroupName );
}
private:
XmlSerializer^ CreateOverrideSerializer()
{
SoapAttributeOverrides^ mySoapAttributeOverrides = gcnew SoapAttributeOverrides;
SoapAttributes^ soapAtts = gcnew SoapAttributes;
// Create a new DefaultValueAttribute Object* for the GroupName
// property.
DefaultValueAttribute^ newDefault = gcnew DefaultValueAttribute( "Team1" );
soapAtts->SoapDefaultValue = newDefault;
mySoapAttributeOverrides->Add( Group::typeid, "GroupName", soapAtts );
// Create an XmlTypeMapping that is used to create an instance
// of the XmlSerializer. Then return the XmlSerializer Object*.
XmlTypeMapping^ myMapping = (gcnew SoapReflectionImporter( mySoapAttributeOverrides ))->ImportTypeMapping( Group::typeid );
XmlSerializer^ ser = gcnew XmlSerializer( myMapping );
return ser;
}
};
int main()
{
Run^ test = gcnew Run;
test->SerializeOriginal( "SoapOriginal.xml" );
test->SerializeOverride( "mySoapAttributeOverridesideAttributes.xml" );
test->DeserializeOriginal( "SoapOriginal.xml" );
test->DeserializeOverride( "mySoapAttributeOverridesideAttributes.xml" );
}
using System;
using System.IO;
using System.Xml;
using System.Xml.Serialization;
using System.Xml.Schema;
using System.ComponentModel;
public class Group
{
// The default is set to .NET.
[DefaultValue(".NET")]
public string GroupName;
}
public class Run
{
public static void Main()
{
Run test = new Run();
test.SerializeOriginal("SoapOriginal.xml");
test.SerializeOverride("mySoapAttributeOverridesideAttributes.xml");
test.DeserializeOriginal("SoapOriginal.xml");
test.DeserializeOverride("mySoapAttributeOverridesideAttributes.xml");
}
public void SerializeOriginal(string filename)
{
// Create an instance of the XmlSerializer class.
XmlSerializer mySerializer =
new XmlSerializer(typeof(Group));
// Writing the file requires a TextWriter.
TextWriter writer = new StreamWriter(filename);
// Create an instance of the class that will be serialized.
Group myGroup = new Group();
// Setting the GroupName to '.NET' is like not setting it at all
// because it is the default value. So no value will be
// serialized, and on deserialization it will appear as a blank.
myGroup.GroupName = ".NET";
// Serialize the class, and close the TextWriter.
mySerializer.Serialize(writer, myGroup);
writer.Close();
}
public void SerializeOverride(string filename)
{
// Create an instance of the XmlSerializer class
// that overrides the serialization.
XmlSerializer overRideSerializer = CreateOverrideSerializer();
// Writing the file requires a TextWriter.
TextWriter writer = new StreamWriter(filename);
// Create an instance of the class that will be serialized.
Group myGroup = new Group();
// The override specifies that the default value is now
// 'Team1'. So setting the GroupName to '.NET' means
// the value will be serialized.
myGroup.GroupName = ".NET";
// Serialize the class, and close the TextWriter.
overRideSerializer.Serialize(writer, myGroup);
writer.Close();
}
public void DeserializeOriginal(string filename)
{
// Create an instance of the XmlSerializer class.
XmlSerializer mySerializer= new XmlSerializer(typeof(Group));
// Reading the file requires a TextReader.
TextReader reader = new StreamReader(filename);
// Deserialize and cast the object.
Group myGroup;
myGroup = (Group) mySerializer.Deserialize(reader);
Console.WriteLine(myGroup.GroupName);
Console.WriteLine();
}
public void DeserializeOverride(string filename)
{
// Create an instance of the XmlSerializer class.
XmlSerializer overRideSerializer = CreateOverrideSerializer();
// Reading the file requires a TextReader.
TextReader reader = new StreamReader(filename);
// Deserialize and cast the object.
Group myGroup;
myGroup = (Group) overRideSerializer.Deserialize(reader);
Console.WriteLine(myGroup.GroupName);
}
private XmlSerializer CreateOverrideSerializer()
{
SoapAttributeOverrides mySoapAttributeOverrides =
new SoapAttributeOverrides();
SoapAttributes soapAtts = new SoapAttributes();
// Create a new DefaultValueAttribute object for the GroupName
// property.
DefaultValueAttribute newDefault =
new DefaultValueAttribute("Team1");
soapAtts.SoapDefaultValue = newDefault;
mySoapAttributeOverrides.Add(typeof(Group), "GroupName",
soapAtts);
// Create an XmlTypeMapping that is used to create an instance
// of the XmlSerializer. Then return the XmlSerializer object.
XmlTypeMapping myMapping = (new SoapReflectionImporter(
mySoapAttributeOverrides)).ImportTypeMapping(typeof(Group));
XmlSerializer ser = new XmlSerializer(myMapping);
return ser;
}
}
Imports System.IO
Imports System.Xml
Imports System.Xml.Serialization
Imports System.Xml.Schema
Imports System.ComponentModel
Public Class Group
' The default is set to .NET.
<DefaultValue(".NET")> _
Public GroupName As String
End Class
Public Class Run
Public Shared Sub Main()
Dim test As Run = new Run()
test.SerializeOriginal("SoapOriginal.xml")
test.SerializeOverride _
("mySoapAttributeOverridesideAttributes.xml")
test.DeserializeOriginal("SoapOriginal.xml")
test.DeserializeOverride _
("mySoapAttributeOverridesideAttributes.xml")
End Sub
public Sub SerializeOriginal(filename As String)
' Create an instance of the XmlSerializer class.
Dim mySerializer As XmlSerializer = _
new XmlSerializer(GetType(Group))
' Writing the file requires a TextWriter.
Dim writer As TextWriter = new StreamWriter(filename)
' Create an instance of the class that will be serialized.
Dim myGroup As Group = new Group()
' Setting the GroupName to '.NET' is like not setting it at all
' because it is the default value. So no value will be
' serialized, and on deserialization it will appear as a blank.
myGroup.GroupName = ".NET"
' Serialize the class, and close the TextWriter.
mySerializer.Serialize(writer, myGroup)
writer.Close()
End Sub
Public Sub SerializeOverride(filename As String)
' Create an instance of the XmlSerializer class
' that overrides the serialization.
Dim overRideSerializer As XmlSerializer = CreateOverrideSerializer()
' Writing the file requires a TextWriter.
Dim writer As TextWriter = new StreamWriter(filename)
' Create an instance of the class that will be serialized.
Dim myGroup As Group = new Group()
' The override specifies that the default value is now
' 'Team1'. So setting the GroupName to '.NET' means
' the value will be serialized.
myGroup.GroupName = ".NET"
' Serialize the class, and close the TextWriter.
overRideSerializer.Serialize(writer, myGroup)
writer.Close()
End Sub
Public Sub DeserializeOriginal(filename As String)
' Create an instance of the XmlSerializer class.
Dim mySerializer As XmlSerializer = new XmlSerializer(GetType(Group))
' Reading the file requires a TextReader.
Dim reader As TextReader = new StreamReader(filename)
' Deserialize and cast the object.
Dim myGroup As Group = CType(mySerializer.Deserialize(reader), Group)
Console.WriteLine(myGroup.GroupName)
Console.WriteLine()
End Sub
Public Sub DeserializeOverride(filename As String)
' Create an instance of the XmlSerializer class.
Dim overRideSerializer As XmlSerializer = CreateOverrideSerializer()
' Reading the file requires a TextReader.
Dim reader As TextReader = new StreamReader(filename)
' Deserialize and cast the object.
Dim myGroup As Group = CType(overRideSerializer.Deserialize(reader), Group)
Console.WriteLine(myGroup.GroupName)
End Sub
Private Function CreateOverrideSerializer() As XmlSerializer
Dim mySoapAttributeOverrides As SoapAttributeOverrides = _
New SoapAttributeOverrides()
Dim soapAtts As SoapAttributes = New SoapAttributes()
' Create a new DefaultValueAttribute object for the GroupName
' property.
Dim newDefault As DefaultValueAttribute = _
new DefaultValueAttribute("Team1")
soapAtts.SoapDefaultValue = newDefault
mySoapAttributeOverrides.Add(GetType(Group), "GroupName", _
soapAtts)
' Create an XmlTypeMapping that is used to create an instance
' of the XmlSerializer. Then return the XmlSerializer object.
Dim myMapping As XmlTypeMapping = _
(New SoapReflectionImporter( _
mySoapAttributeOverrides)).ImportTypeMapping(GetType(Group))
Dim ser As XmlSerializer = new XmlSerializer(myMapping)
return ser
End Function
End Class
Комментарии
Значение по умолчанию элемента можно задать, применив DefaultValueAttribute атрибут к элементу. Если элемент сериализуется как закодированное сообщение SOAP, можно изменить значение по умолчанию, создав новое DefaultValueAttribute, задав его Value свойство и задав SoapDefaultValue свойство для объекта. Добавьте к SoapAttributes объекту SoapAttributeOverrides. Дополнительные сведения см. в обзоре SoapAttributeOverrides класса.