KnownTypeAttribute.MethodName Eigenschap
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Hiermee haalt u de naam op van een methode die een lijst met typen retourneert die moeten worden herkend tijdens serialisatie of deserialisatie.
public:
property System::String ^ MethodName { System::String ^ get(); };
public string MethodName { get; }
member this.MethodName : string
Public ReadOnly Property MethodName As String
Waarde van eigenschap
Een String met de naam van de methode voor het type dat door de KnownTypeAttribute klasse is gedefinieerd.
Voorbeelden
In het volgende voorbeeld wordt de methodName parameter gebruikt om een methode te identificeren in het type dat een matrix met Type objecten bevat.
namespace KnownTypeAttributeExample
{
using System;
using System.Xml;
using System.Collections.Generic;
using System.Text;
using System.Runtime.Serialization;
using System.IO;
// The constructor names the method that returns an array
// of types that can be used during deserialization.
[KnownTypeAttribute("KnownTypes")]
[DataContract]
public class Employee
{
public Employee(string newFName, string newLName)
{
FirstName = newFName;
LastName = newLName;
}
[DataMember]
internal string FirstName;
[DataMember]
internal string LastName;
[DataMember]
internal int id;
[DataMember]
internal Manager Boss;
// This method returns the array of known types.
static Type[] KnownTypes()
{
return new Type[]{typeof(Manager), typeof(Employee)};
}
}
[DataContract]
public class Manager : Employee
{
// Call the base class's constructor.
public Manager(string newFName, string newLName)
: base(newFName, newLName)
{ }
[DataMember]
internal Employee[] Reports;
}
class Program
{
public static void Main()
{
try
{
Serialize("person1.xml");
Deserialize("person1.xml");
}
catch (SerializationException se)
{
Console.WriteLine("{0}: {1}",
se.Message, se.StackTrace);
}
finally
{
Console.WriteLine("Press Enter to exit....");
Console.ReadLine();
}
}
static void Serialize(string path)
{
Employee emp = new Employee("John", "Peoples");
emp.id = 3001;
Manager theBoss = new Manager("Michiyo", "Sato");
theBoss.id = 41;
emp.Boss = theBoss;
DataContractSerializer ser =
new DataContractSerializer(typeof(Employee));
FileStream fs =
new FileStream(path, FileMode.OpenOrCreate);
ser.WriteObject(fs, emp);
fs.Close();
}
static void Deserialize(string path)
{
DataContractSerializer ser =
new DataContractSerializer(typeof(Employee));
FileStream fs = new FileStream(path,
FileMode.Open);
Employee p = (Employee)ser.ReadObject(fs);
Console.WriteLine("{0} {1}, id:{2}", p.FirstName,
p.LastName, p.id);
fs.Close();
}
}
}
' The constructor names the method that returns an array
' of types that can be used during deserialization.
<KnownTypeAttribute("KnownTypes"), DataContract()> _
Public Class Employee
Public Sub New(ByVal newFName As String, ByVal newLName As String)
FirstName = newFName
LastName = newLName
End Sub
<DataMember()> _
Friend FirstName As String
<DataMember()> _
Friend LastName As String
<DataMember()> _
Friend id As Integer
<DataMember()> _
Friend Boss As Manager
' This method returns the array of known types.
Shared Function KnownTypes() As Type()
Return New Type() {GetType(Manager), GetType(Employee)}
End Function
End Class
<DataContract()> _
Public Class Manager
Inherits Employee
' Call the base class's constructor.
Public Sub New(ByVal newFName As String, ByVal newLName As String)
MyBase.New(newFName, newLName)
End Sub
<DataMember()> _
Friend Reports() As Employee
End Class
Class Program
Public Shared Sub Main()
Try
Serialize("person1.xml")
Deserialize("person1.xml")
Catch se As SerializationException
Console.WriteLine("{0}: {1}", se.Message, se.StackTrace)
Finally
Console.WriteLine("Press Enter to exit....")
Console.ReadLine()
End Try
End Sub
Shared Sub Serialize(ByVal path As String)
Dim emp As New Employee("John", "Peoples")
emp.id = 3001
Dim theBoss As New Manager("Michiyo", "Sato")
theBoss.id = 41
emp.Boss = theBoss
Dim ser As New DataContractSerializer(GetType(Employee))
Dim fs As New FileStream(path, FileMode.OpenOrCreate)
ser.WriteObject(fs, emp)
fs.Close()
End Sub
Shared Sub Deserialize(ByVal path As String)
Dim ser As New DataContractSerializer(GetType(Employee))
Dim fs As New FileStream(path, FileMode.Open)
Dim p As Employee = CType(ser.ReadObject(fs), Employee)
Console.WriteLine("{0} {1}, id:{2}", p.FirstName, p.LastName, p.id)
fs.Close()
End Sub
End Class
Opmerkingen
De methode moet bestaan op de klasse of structuur waarop de KnownTypeAttribute toepassing is toegepast, moet statisch zijn, mag geen parameters accepteren en moet een exemplaar retourneren van elk type dat de algemene IEnumerable<T> interface implementeert, zoals de Collection<T> klasse of een matrix met Type objecten.
De methode wordt eenmaal per toepassingsdomein aangeroepen wanneer het gegevenscontract voor het type wordt geladen.