XmlChoiceIdentifierAttribute.MemberName 属性
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
获取或设置字段的名称,该字段返回在检测类型时使用的枚举。
public:
property System::String ^ MemberName { System::String ^ get(); void set(System::String ^ value); };
public string MemberName { get; set; }
member this.MemberName : string with get, set
Public Property MemberName As String
属性值
返回枚举的字段的名称。
示例
以下示例序列化一个名为 Choices
包含两个字段的类, MyChoice
以及 ManyChoices
。 应用于 XmlChoiceIdentifierAttribute 每个字段,该字段指定通过 MemberName 属性 () 另一个类成员) 用于获取或设置检测成员值的枚举。 该 MyChoice
字段可以设置为单个值,并在字段中找到 EnumType
相应的枚举成员。 该 ManyChoices
字段返回对象的数组。 该 ChoiceArray
字段返回枚举值的数组。 对于字段中的每个数组成员 ManyChoices
,在字段返回 ChoiceArray
的数组中找到相应的成员。
#using <System.dll>
#using <System.xml.dll>
using namespace System;
using namespace System::Xml;
using namespace System::Xml::Serialization;
using namespace System::IO;
[XmlType(IncludeInSchema=false)]
public enum class ItemChoiceType
{
None, Word, Number, DecimalNumber
};
public enum class MoreChoices
{
None, Item, Amount, Temp
};
public ref class Choices
{
public:
// The MyChoice field can be set to any one of
// the types below.
[XmlChoiceIdentifier("EnumType")]
[XmlElement("Word",String::typeid)]
[XmlElement("Number",Int32::typeid)]
[XmlElement("DecimalNumber",Double::typeid)]
Object^ MyChoice;
// Don't serialize this field. The EnumType field
// contains the enumeration value that corresponds
// to the MyChoice field value.
[XmlIgnore]
ItemChoiceType EnumType;
// The ManyChoices field can contain an array
// of choices. Each choice must be matched to
// an array item in the ChoiceArray field.
[XmlChoiceIdentifier("ChoiceArray")]
[XmlElement("Item",String::typeid)]
[XmlElement("Amount",Int32::typeid)]
[XmlElement("Temp",Double::typeid)]
array<Object^>^ManyChoices;
// TheChoiceArray field contains the enumeration
// values, one for each item in the ManyChoices array.
[XmlIgnore]
array<MoreChoices>^ChoiceArray;
};
void SerializeObject( String^ filename );
void DeserializeObject( String^ filename );
int main()
{
SerializeObject( "Choices.xml" );
DeserializeObject( "Choices.xml" );
}
void SerializeObject( String^ filename )
{
XmlSerializer^ mySerializer = gcnew XmlSerializer( Choices::typeid );
TextWriter^ writer = gcnew StreamWriter( filename );
Choices^ myChoices = gcnew Choices;
// Set the MyChoice field to a string. Set the
// EnumType to Word.
myChoices->MyChoice = "Book";
myChoices->EnumType = ItemChoiceType::Word;
// Populate an object array with three items, one
// of each enumeration type. Set the array to the
// ManyChoices field.
array<Object^>^strChoices = {"Food",5,98.6};
myChoices->ManyChoices = strChoices;
// For each item in the ManyChoices array, add an
// enumeration value.
array<MoreChoices>^ itmChoices = {MoreChoices::Item,MoreChoices::Amount,MoreChoices::Temp};
myChoices->ChoiceArray = itmChoices;
mySerializer->Serialize( writer, myChoices );
writer->Close();
}
void DeserializeObject( String^ filename )
{
XmlSerializer^ ser = gcnew XmlSerializer( Choices::typeid );
// A FileStream is needed to read the XML document.
FileStream^ fs = gcnew FileStream( filename,FileMode::Open );
Choices^ myChoices = safe_cast<Choices^>(ser->Deserialize( fs ));
fs->Close();
// Disambiguate the MyChoice value using the enumeration.
if ( myChoices->EnumType == ItemChoiceType::Word )
{
Console::WriteLine( "Word: {0}", myChoices->MyChoice->ToString() );
}
else
if ( myChoices->EnumType == ItemChoiceType::Number )
{
Console::WriteLine( "Number: {0}", myChoices->MyChoice->ToString() );
}
else
if ( myChoices->EnumType == ItemChoiceType::DecimalNumber )
{
Console::WriteLine( "DecimalNumber: {0}", myChoices->MyChoice->ToString() );
}
// Disambiguate the ManyChoices values using the enumerations.
for ( int i = 0; i < myChoices->ManyChoices->Length; i++ )
{
if ( myChoices->ChoiceArray[ i ] == MoreChoices::Item )
Console::WriteLine( "Item: {0}", myChoices->ManyChoices[ i ] );
else
if ( myChoices->ChoiceArray[ i ] == MoreChoices::Amount )
Console::WriteLine( "Amount: ", myChoices->ManyChoices[ i ]->ToString() );
if ( myChoices->ChoiceArray[ i ] == MoreChoices::Temp )
Console::WriteLine( "Temp: {0}", myChoices->ManyChoices[ i ]->ToString() );
}
}
using System;
using System.Xml;
using System.Xml.Serialization;
using System.IO;
public class Choices{
// The MyChoice field can be set to any one of
// the types below.
[XmlChoiceIdentifier("EnumType")]
[XmlElement("Word", typeof(string))]
[XmlElement("Number", typeof(int))]
[XmlElement("DecimalNumber", typeof(double))]
public object MyChoice;
// Don't serialize this field. The EnumType field
// contains the enumeration value that corresponds
// to the MyChoice field value.
[XmlIgnore]
public ItemChoiceType EnumType;
// The ManyChoices field can contain an array
// of choices. Each choice must be matched to
// an array item in the ChoiceArray field.
[XmlChoiceIdentifier("ChoiceArray")]
[XmlElement("Item", typeof(string))]
[XmlElement("Amount", typeof(int))]
[XmlElement("Temp", typeof(double))]
public object[] ManyChoices;
// TheChoiceArray field contains the enumeration
// values, one for each item in the ManyChoices array.
[XmlIgnore]
public MoreChoices[] ChoiceArray;
}
[XmlType(IncludeInSchema=false)]
public enum ItemChoiceType{
None,
Word,
Number,
DecimalNumber
}
public enum MoreChoices{
None,
Item,
Amount,
Temp
}
public class Test{
static void Main(){
Test t = new Test();
t.SerializeObject("Choices.xml");
t.DeserializeObject("Choices.xml");
}
private void SerializeObject(string filename){
XmlSerializer mySerializer =
new XmlSerializer(typeof(Choices));
TextWriter writer = new StreamWriter(filename);
Choices myChoices = new Choices();
// Set the MyChoice field to a string. Set the
// EnumType to Word.
myChoices.MyChoice= "Book";
myChoices.EnumType = ItemChoiceType.Word;
// Populate an object array with three items, one
// of each enumeration type. Set the array to the
// ManyChoices field.
object[] strChoices = new object[]{"Food", 5, 98.6};
myChoices.ManyChoices=strChoices;
// For each item in the ManyChoices array, add an
// enumeration value.
MoreChoices[] itmChoices = new MoreChoices[]
{MoreChoices.Item,
MoreChoices.Amount,
MoreChoices.Temp};
myChoices.ChoiceArray=itmChoices;
mySerializer.Serialize(writer, myChoices);
writer.Close();
}
private void DeserializeObject(string filename){
XmlSerializer ser = new XmlSerializer(typeof(Choices));
// A FileStream is needed to read the XML document.
FileStream fs = new FileStream(filename, FileMode.Open);
Choices myChoices = (Choices)
ser.Deserialize(fs);
fs.Close();
// Disambiguate the MyChoice value using the enumeration.
if(myChoices.EnumType == ItemChoiceType.Word){
Console.WriteLine("Word: " +
myChoices.MyChoice.ToString());
}
else if(myChoices.EnumType == ItemChoiceType.Number){
Console.WriteLine("Number: " +
myChoices.MyChoice.ToString());
}
else if(myChoices.EnumType == ItemChoiceType.DecimalNumber){
Console.WriteLine("DecimalNumber: " +
myChoices.MyChoice.ToString());
}
// Disambiguate the ManyChoices values using the enumerations.
for(int i = 0; i<myChoices.ManyChoices.Length; i++){
if(myChoices.ChoiceArray[i] == MoreChoices.Item)
Console.WriteLine("Item: " + (string) myChoices.ManyChoices[i]);
else if(myChoices.ChoiceArray[i] == MoreChoices.Amount)
Console.WriteLine("Amount: " + myChoices.ManyChoices[i].ToString());
if(myChoices.ChoiceArray[i] == MoreChoices.Temp)
Console.WriteLine("Temp: " + (string) myChoices.ManyChoices[i].ToString());
}
}
}
Imports System.Xml
Imports System.Xml.Serialization
Imports System.IO
Public Class Choices
' The MyChoice field can be set to any one of
' the types below.
<XmlChoiceIdentifier("EnumType"), _
XmlElement("Word", GetType(String)), _
XmlElement("Number", GetType(Integer)), _
XmlElement("DecimalNumber", GetType(double))> _
Public MyChoice As Object
' Don't serialize this field. The EnumType field
' contains the enumeration value that corresponds
' to the MyChoice field value.
<XmlIgnore> _
Public EnumType As ItemChoiceType
'The ManyChoices field can contain an array
' of choices. Each choice must be matched to
' an array item in the ChoiceArray field.
<XmlChoiceIdentifier("ChoiceArray"), _
XmlElement("Item", GetType(string)), _
XmlElement("Amount", GetType(Integer)), _
XmlElement("Temp", GetType(double))> _
Public ManyChoices() As Object
' TheChoiceArray field contains the enumeration
' values, one for each item in the ManyChoices array.
<XmlIgnore> _
Public ChoiceArray() As MoreChoices
End Class
<XmlType(IncludeInSchema:=false)> _
Public Enum ItemChoiceType
None
Word
Number
DecimalNumber
End Enum
<XmlType(IncludeInSchema:=false)> _
Public Enum MoreChoices
None
Item
Amount
Temp
End Enum
Public Class Test
Shared Sub Main()
Dim t As Test = New Test()
t.SerializeObject("Choices.xml")
t.DeserializeObject("Choices.xml")
End Sub
private Sub SerializeObject(filename As string)
Dim mySerializer As XmlSerializer = _
New XmlSerializer(GetType(Choices))
Dim writer As TextWriter = New StreamWriter(filename)
Dim myChoices As Choices = New Choices()
' Set the MyChoice field to a string. Set the
' EnumType to Word.
myChoices.MyChoice= "Book"
myChoices.EnumType = ItemChoiceType.Word
' Populate an object array with three items, one
' of each enumeration type. Set the array to the
' ManyChoices field.
Dim strChoices () As Object = New object(){"Food", 5, 98.6}
myChoices.ManyChoices=strChoices
' For each item in the ManyChoices array, add an
' enumeration value.
Dim itmChoices () As MoreChoices = New MoreChoices() _
{MoreChoices.Item, _
MoreChoices.Amount, _
MoreChoices.Temp}
myChoices.ChoiceArray=itmChoices
mySerializer.Serialize(writer, myChoices)
writer.Close()
End Sub
private Sub DeserializeObject(filename As string)
Dim ser As XmlSerializer = New XmlSerializer(GetType(Choices))
' A FileStream is needed to read the XML document.
Dim fs As FileStream = New FileStream(filename, FileMode.Open)
Dim myChoices As Choices = CType(ser.Deserialize(fs), Choices)
fs.Close()
' Disambiguate the MyChoice value Imports the enumeration.
if myChoices.EnumType = ItemChoiceType.Word Then
Console.WriteLine("Word: " & _
myChoices.MyChoice.ToString())
else if myChoices.EnumType = ItemChoiceType.Number Then
Console.WriteLine("Number: " & _
myChoices.MyChoice.ToString())
else if myChoices.EnumType = ItemChoiceType.DecimalNumber Then
Console.WriteLine("DecimalNumber: " & _
myChoices.MyChoice.ToString())
End If
' Disambiguate the ManyChoices values Imports the enumerations.
Dim i As Integer
for i = 0 to myChoices.ManyChoices.Length -1
if myChoices.ChoiceArray(i) = MoreChoices.Item Then
Console.WriteLine("Item: " + _
myChoices.ManyChoices(i).ToString())
else if myChoices.ChoiceArray(i) = MoreChoices.Amount Then
Console.WriteLine("Amount: " + _
myChoices.ManyChoices(i).ToString())
else if (myChoices.ChoiceArray(i) = MoreChoices.Temp)
Console.WriteLine("Temp: " + _
myChoices.ManyChoices(i).ToString())
End If
Next i
End Sub
End Class
注解
值中命名 MemberName 的字段返回的枚举中必须至少有一个成员。 默认情况下,该枚举名称采用应用于的 XmlChoiceIdentifierAttribute 字段的名称。