Weitere Informationen finden Sie unterFor more information about zu gültigen und ungültigen Sammlungen sowie Informationen zum Serialisieren von Sammlungen finden Sie in den Informationen zum Serialisieren von Sammlungen im Abschnitt "Erweiterte Sammlungsregeln" dieses Themas. what is and what is not considered a valid collection, as well as about how collections are serialized, see the information about serializing collections in the "Advanced Collection Rules" section of this topic.

Sie können die Name - und die Namespace -Eigenschaft verwenden, um die Benennung noch weiter anzupassen.You can use the Name and Namespace properties to further customize the naming.Siehe folgende Klasse.See the following class.

[DataContract]
public class Employee
{
[DataMember]
public string name = "John Doe";
[DataMember]
public Payroll payrollRecord;
[DataMember]
public Training trainingRecord;
}
[DataContract]
[KnownType(typeof(int[]))] //required because int[] is used polymorphically
[KnownType(typeof(ArrayList))] //required because ArrayList is used polymorphically
public class Payroll
{
[DataMember]
public object salaryPayments = new int[12];
//float[] not needed in known types because polymorphic assignment is to another collection type
[DataMember]
public IEnumerable<float> stockAwards = new float[12];
[DataMember]
public object otherPayments = new ArrayList();
}
[DataContract]
[KnownType(typeof(List<object>))]
//required because List<object> is used polymorphically
//does not conflict with ArrayList above because it's a different scope,
//even though it's the same data contract
[KnownType(typeof(InHouseTraining))] //Required if InHouseTraining can be used in the collection
[KnownType(typeof(OutsideTraining))] //Required if OutsideTraining can be used in the collection
public class Training
{
[DataMember]
public object training = new List<object>();
}
[DataContract]
public class InHouseTraining
{
//code omitted
}
[DataContract]
public class OutsideTraining
{
//code omitted
}

<DataContract()> _
Public Class Employee
<DataMember()> _
Public name As String = "John Doe"
<DataMember()> _
Public payrollRecord As Payroll
<DataMember()> _
Public trainingRecord As Training
End Class
<DataContract(), KnownType(GetType(Integer())), KnownType(GetType(ArrayList))> _
Public Class Payroll
<DataMember()> _
Public salaryPayments As Object = New Integer(11) {}
'float[] not needed in known types because polymorphic assignment is to another collection type
<DataMember()> _
Public stockAwards As IEnumerable(Of Single) = New Single(11) {}
<DataMember()> _
Public otherPayments As Object = New ArrayList()
End Class
'required because List<object> is used polymorphically
'does not conflict with ArrayList above because it's a different scope,
'even though it's the same data contract
<DataContract(), KnownType(GetType(List(Of Object))), _
KnownType(GetType(InHouseTraining)), _
KnownType(GetType(OutsideTraining))> _
Public Class Training
<DataMember()> _
Public training As Object = New List(Of Object)()
End Class
<DataContract()> _
Public Class InHouseTraining
'code omitted�
End Class
<DataContract()> _
Public Class OutsideTraining
'code omitted�
End Class

In diesem Fall kann eine Instanz von Marks1testMarkszugewiesen werden.In this case, an instance of Marks1 can be assigned to testMarks.Marks2 sollte jedoch nicht verwendet werden: Der zugehörige Datenvertrag stimmt nicht mit dem IList<int> -Datenvertrag überein.However, Marks2 should not be used because its data contract is not considered equivalent to the IList<int> data contract.Der Name des Vertrags "Marks2" und nicht "ArrayOfint", und sich wiederholende Elementname lautet "<markieren >" und nicht "<Int >".The data contract name is "Marks2" and not "ArrayOfint", and the repeating element name is "<mark>" and not "<int>".

In Fällen, in denen der Vertragsname serialisiert wird, sollte die Liste der bekannten Typen den zugewiesenen Sammlungstyp enthalten.In the cases where the contract name is serialized, the assigned collection type should be in the known types list.Auch der entgegengesetzte Fall trifft zu: In Fällen, in denen der Name nicht serialisiert wird, muss der Typ nicht der Liste der bekannten Typen hinzugefügt werden.The opposite is also true: in the cases where the name is not serialized, adding the type to the known types list is not required.

Einem Array eines Basistyps kann ein Array eines abgeleiteten Typs zugewiesen werden.An array of a derived type can be assigned to an array of a base type.In diesem Fall wird der Vertragsname für den abgeleiteten Typ für jedes sich wiederholende Element serialisiert.In this case, the contract name for the derived type is serialized for each repeating element.Wenn z. B. ein Typ Book vom Typ LibraryItemabgeleitet wurde, können Sie ein Array von Book einem Array von LibraryItemhinzufügen.For example, if a type Book derives from the type LibraryItem, you can assign an array of Book to an array of LibraryItem.Dies gilt nicht für andere Sammlungstypen.This does not apply to other collection types.Sie können z. B. eine Generic List of Book nicht einem Generic List of LibraryItemzuweisen.For example, you cannot assign a Generic List of Book to a Generic List of LibraryItem.Sie können aber ein Generic List of LibraryItem zuweisen, das Book -Instanzen enthält.You can, however, assign a Generic List of LibraryItem that contains Book instances.Sowohl im Fall mit Array als auch im Fall ohne Array sollte Book in der Liste der bekannten Typen enthalten sein.In both the array and the non-array case, Book should be in the known types list.

Siehe auchSee Also

The feedback system for this content will be changing soon. Old comments will not be carried over. If content within a comment thread is important to you, please save a copy. For more information on the upcoming change, we invite you to read our blog post.