Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Atrybuty można kontrolować serializacji XML obiektu lub utworzyć alternatywny strumień XML z tego samego zestawu klas. Aby uzyskać więcej informacji na temat tworzenia alternatywnego strumienia XML, zobacz How to: Specify an Alternate Element Name for an XML Stream (Instrukcje: określanie alternatywnej nazwy elementu dla strumienia XML).
Uwaga
Jeśli wygenerowany kod XML musi być zgodny z sekcją 5 dokumentu World Wide Web Consortium (W3C) zatytułowanym Simple Object Access Protocol (SOAP) 1.1, użyj atrybutów wymienionych w temacie Attributes That Control Encoded SOAP Serialization (Attributes That Control Encoded SOAP Serialization).
Domyślnie nazwa elementu XML jest określana przez nazwę klasy lub składowej. W klasie o nazwie pole o nazwie Book
ISBN spowoduje wygenerowanie tagu <ISBN>
elementu XML, jak pokazano w poniższym przykładzie:
Public Class Book
Public ISBN As String
End Class
' When an instance of the Book class is serialized, it might
' produce this XML:
' <ISBN>1234567890</ISBN>.
public class Book
{
public string ISBN;
}
// When an instance of the Book class is serialized, it might
// produce this XML:
// <ISBN>1234567890</ISBN>.
Domyślne zachowanie można zmienić, jeśli chcesz nadać elementowi nową nazwę. Poniższy kod pokazuje, jak atrybut włącza tę funkcję, ustawiając ElementName właściwość elementu XmlElementAttribute:
Public Class TaxRates
< XmlElement(ElementName = "TaxRate")> _
Public ReturnTaxRate As Decimal
End Class
public class TaxRates {
[XmlElement(ElementName = "TaxRate")]
public decimal ReturnTaxRate;
}
Aby uzyskać więcej informacji na temat atrybutów, zobacz Atrybuty. Aby uzyskać listę atrybutów kontrolujących serializacji XML, zobacz Atrybuty kontrolujące serializacji XML.
Kontrolowanie serializacji tablicy
Atrybuty XmlArrayAttribute i XmlArrayItemAttribute kontrolują serializacji tablic. Korzystając z tych atrybutów, można kontrolować nazwę elementu, przestrzeń nazw i typ danych schematu XML (XSD) zgodnie z definicją w dokumencie W3C zatytułowanym Schemat XML Część 2: Typy danych. Można również określić typy, które mogły zostać uwzględnione w tablicy.
XmlArrayAttribute Ustali właściwości otaczającego element XML, który powstaje wtedy, gdy jest serializowana tablicy. Na przykład domyślnie serializowanie poniższej tablicy spowoduje powstanie elementu XML o nazwie Employees
. Employees
Element będzie zawierać szereg elementów o nazwie po typ tablicy Employee
.
Public Class Group
Public Employees() As Employee
End Class
Public Class Employee
Public Name As String
End Class
public class Group {
public Employee[] Employees;
}
public class Employee {
public string Name;
}
Serializowane wystąpienie może przypominać następujący kod:
<Group>
<Employees>
<Employee>
<Name>Haley</Name>
</Employee>
</Employees>
</Group>
Stosując element XmlArrayAttribute, można zmienić nazwę elementu XML w następujący sposób:
Public Class Group
<XmlArray("TeamMembers")> _
Public Employees() As Employee
End Class
public class Group {
[XmlArray("TeamMembers")]
public Employee[] Employees;
}
Wynikowy kod XML może przypominać następujący kod:
<Group>
<TeamMembers>
<Employee>
<Name>Haley</Name>
</Employee>
</TeamMembers>
</Group>
XmlArrayItemAttribute, Z drugiej strony, określa, jak są serializacji elementów znajdujących się w tablicy.
Uwaga
Atrybut jest stosowany do pola zwracającego tablicę.
Public Class Group
<XmlArrayItem("MemberName")> _
Public Employee() As Employees
End Class
public class Group {
[XmlArrayItem("MemberName")]
public Employee[] Employees;
}
Wynikowy kod XML może przypominać następujący kod:
<Group>
<Employees>
<MemberName>Haley</MemberName>
</Employees>
</Group>
Klasy pochodne serializacji
Używanie innego XmlArrayItemAttribute jest umożliwienie serializacji w klasach pochodnych. Na przykład do poprzedniego przykładu można dodać inną klasę o nazwie Manager
, która pochodzi z Employee
klasy . Jeśli nie zastosujesz XmlArrayItemAttributeklasy , kod zakończy się niepowodzeniem w czasie wykonywania, ponieważ typ klasy pochodnej nie zostanie rozpoznany. Aby rozwiązać ten wynik, zastosuj atrybut dwa razy, za każdym razem ustawiając Type właściwość dla każdego dopuszczalnego typu (podstawowego i pochodnego).
Public Class Group
<XmlArrayItem(Type:=GetType(Employee)), _
XmlArrayItem(Type:=GetType(Manager))> _
Public Employees() As Employee
End Class
Public Class Employee
Public Name As String
End Class
Public Class Manager
Inherits Employee
Public Level As Integer
End Class
public class Group {
[XmlArrayItem(Type = typeof(Employee)),
XmlArrayItem(Type = typeof(Manager))]
public Employee[] Employees;
}
public class Employee {
public string Name;
}
public class Manager:Employee {
public int Level;
}
Serializowane wystąpienie może przypominać następujący kod:
<Group>
<Employees>
<Employee>
<Name>Haley</Name>
</Employee>
<Employee xsi:type = "Manager">
<Name>Ann</Name>
<Level>3</Level>
</Employee>
</Employees>
</Group>
Szeregowanie tablicę jako sekwencję elementów
Można również serializować tablicę jako płaską sekwencję elementów XML, stosując element do XmlElementAttribute pola zwracającego tablicę w następujący sposób:
Public Class Group
<XmlElement> _
Public Employees() As Employee
End Class
public class Group {
[XmlElement]
public Employee[] Employees;
}
Serializowane wystąpienie może przypominać następujący kod:
<Group>
<Employees>
<Name>Haley</Name>
</Employees>
<Employees>
<Name>Noriko</Name>
</Employees>
<Employees>
<Name>Marco</Name>
</Employees>
</Group>
W inny sposób do odróżniania dwóch strumieni XML jest do generowania PLików dokumentów schematu XML (XSD) z skompilowany kod za pomocą narzędzia definicji schematu XML. Aby uzyskać więcej informacji na temat korzystania z narzędzia, zobacz Narzędzie definicji schematu XML i serializacja XML. Jeśli do pola nie zastosowano żadnego atrybutu, schemat opisuje element w następujący sposób:
<xs:element minOccurs="0" maxOccurs ="1" name="Employees" type="ArrayOfEmployee" />
XmlElementAttribute Po zastosowaniu elementu do pola wynikowy schemat opisuje element w następujący sposób:
<xs:element minOccurs="0" maxOccurs="unbounded" name="Employees" type="Employee" />
Serializacji ArrayList
ArrayList Klasy może zawierać kolekcji różnych obiektów. W związku z tym można użyć ArrayList tablicy. Używaj pola, która zwraca tablicę obiektów określonego typu, jednak można utworzyć pole, które zwraca pojedynczą ArrayList. Jednak, podobnie jak w przypadku tablic, musi powiadomić XmlSerializer typów obiektów ArrayList zawiera. Aby to osiągnąć, przypisz wiele wystąpień XmlElementAttribute obiektu do pola, jak pokazano w poniższym przykładzie.
Public Class Group
<XmlElement(Type:=GetType(Employee)), _
XmlElement(Type:=GetType(Manager))> _
Public Info As ArrayList
End Class
public class Group {
[XmlElement(Type = typeof(Employee)),
XmlElement(Type = typeof(Manager))]
public ArrayList Info;
}
Kontrolowanie serializacji klas przy użyciu XmlRootAttribute i XmlTypeAttribute
Do klasy można zastosować tylko dwa atrybuty: XmlRootAttribute i XmlTypeAttribute. Te atrybuty są podobne. Można XmlRootAttribute go zastosować tylko do jednej klasy: klasy, która po serializacji reprezentuje element otwierający i zamykający dokumentu XML — innymi słowy, element główny. Z XmlTypeAttributedrugiej strony element można zastosować do dowolnej klasy, w tym klasy głównej.
Na przykład w poprzednich przykładach Group
klasa jest klasą główną, a wszystkie jej pola publiczne i właściwości stają się elementami XML znajdującymi się w dokumencie XML. W związku z tym można mieć tylko jedną klasę główną. Stosując element XmlRootAttribute, można kontrolować strumień XML wygenerowany przez element XmlSerializer. Można na przykład zmienić nazwę elementu i przestrzeń nazw.
XmlTypeAttribute Umożliwia sterowanie schemat wygenerowanego kodu XML. Ta funkcja jest przydatne, gdy należy opublikować schematu za pomocą usługi sieci Web XML. Poniższy przykład dotyczy zarówno klasy , jak XmlTypeAttribute i XmlRootAttribute do tej samej klasy:
<XmlRoot("NewGroupName"), _
XmlType("NewTypeName")> _
Public Class Group
Public Employees() As Employee
End Class
[XmlRoot("NewGroupName")]
[XmlType("NewTypeName")]
public class Group {
public Employee[] Employees;
}
Jeśli ta klasa jest kompilowana, a narzędzie definicji schematu XML jest używane do generowania jego schematu, można znaleźć następujący kod XML opisujący Group
:
<xs:element name="NewGroupName" type="NewTypeName" />
Natomiast w przypadku serializacji wystąpienia klasy można znaleźć tylko NewGroupName
w dokumencie XML:
<NewGroupName>
. . .
</NewGroupName>
Zapobieganie serializacji z XmlIgnoreAttribute
Może wystąpić sytuacja, w której właściwość publiczna lub pole nie musi być serializowane. Na przykład można użyć pola lub właściwości do przechowywania metadanych. W takich przypadkach zastosuj element XmlIgnoreAttribute do pola lub właściwości, a właściwość zostanie pominięta XmlSerializer .