Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Az attribútumok segítségével szabályozható egy objektum XML-szerializálása, vagy létrehozhat egy másik XML-adatfolyamot ugyanabból az osztálykészletből. További információ a másodlagos XML-adatfolyamok létrehozásáról : Útmutató: Alternatív elemnév megadása XML-adatfolyamhoz.
Megjegyzés:
Ha a létrehozott XML-fájlnak meg kell felelnie a World Wide Web Consortium (W3C) 1.1-es Simple Object Access Protocol (SOAP) című dokumentum 5. szakaszának, használja a kódolt SOAP-szerializálást vezérlő attribútumokban felsorolt attribútumokat.
Alapértelmezés szerint az XML-elem nevét az osztály vagy a tag neve határozza meg. Egy elnevezett Bookosztályban egy ISBN nevű mező létrehoz egy XML-elemcímkét <ISBN>, ahogyan az a következő példában látható:
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>.
Az alapértelmezett viselkedés módosítható, ha új nevet szeretne adni az elemnek. Az alábbi kód bemutatja, hogy egy attribútum hogyan teszi lehetővé ezt a funkciót a ElementName tulajdonságának beállításával egy XmlElementAttribute esetén.
Public Class TaxRates
< XmlElement(ElementName = "TaxRate")> _
Public ReturnTaxRate As Decimal
End Class
public class TaxRates {
[XmlElement(ElementName = "TaxRate")]
public decimal ReturnTaxRate;
}
Az attribútumokról további információt az Attribútumok című témakörben talál. Az XML-szerializálást vezérlő attribútumok listáját az XML-szerializálást vezérlő attribútumok című témakörben találja.
Tömb szerializálásának szabályozása
Az XmlArrayAttribute és az XmlArrayItemAttribute attribútumok vezérli a tömbök szerializálását. Ezen attribútumok használatával szabályozhatja az elem nevét, a névteret és az XML-séma (XSD) adattípusát az XML-séma 2. része: Adattípusok című W3C-dokumentumban meghatározott módon. Megadhatja a tömbökbe felvehető típusokat is.
Ez XmlArrayAttribute határozza meg a tömb szerializálásakor eredményként megjelenő beágyazó XML-elem tulajdonságait. Az alábbi tömb szerializálása például alapértelmezés szerint egy XML-elemet Employeeseredményez. Az Employees elem a tömbtípusról Employeeelnevezett elemek sorozatát tartalmazza.
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;
}
A szerializált példányok a következő kódhoz hasonlíthatnak:
<Group>
<Employees>
<Employee>
<Name>Haley</Name>
</Employee>
</Employees>
</Group>
Az alkalmazásával XmlArrayAttribute módosíthatja az XML-elem nevét az alábbiak szerint:
Public Class Group
<XmlArray("TeamMembers")> _
Public Employees() As Employee
End Class
public class Group {
[XmlArray("TeamMembers")]
public Employee[] Employees;
}
Az eredményként kapott XML a következő kódhoz hasonlíthat:
<Group>
<TeamMembers>
<Employee>
<Name>Haley</Name>
</Employee>
</TeamMembers>
</Group>
Másrészt, a XmlArrayItemAttribute szabályozza, hogyan történik a tömb elemeinek szerializálása.
Megjegyzés:
Az attribútum a tömböt visszaadó mezőre lesz alkalmazva.
Public Class Group
<XmlArrayItem("MemberName")> _
Public Employee() As Employees
End Class
public class Group {
[XmlArrayItem("MemberName")]
public Employee[] Employees;
}
Az eredményként kapott XML a következő kódhoz hasonlíthat:
<Group>
<Employees>
<MemberName>Haley</MemberName>
</Employees>
</Group>
Származtatott osztályok szerializálása
Egy másik felhasználási mód a XmlArrayItemAttribute származtatott osztályok szerializálásának engedélyezése. Az előző példához például hozzáadhat egy másik osztályt Manager, amely a Employee-ből származik. Ha nem alkalmazza a XmlArrayItemAttributekódot, a kód futásidőben meghiúsul, mert a származtatott osztálytípus nem lesz felismerve. Ennek az eredménynek a orvoslásához alkalmazza az attribútumot kétszer, minden alkalommal, amikor a tulajdonságot Type minden elfogadható típusra (alapra és származtatottre) állítja be.
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;
}
A szerializált példányok a következő kódhoz hasonlíthatnak:
<Group>
<Employees>
<Employee>
<Name>Haley</Name>
</Employee>
<Employee xsi:type = "Manager">
<Name>Ann</Name>
<Level>3</Level>
</Employee>
</Employees>
</Group>
Tömb szerializálása elemek sorozataként
A tömböket xml-elemek egybesimított sorozataként is szerializálhatja, ha a tömböt visszaadó mezőre az alábbiak szerint alkalmaz egy XmlElementAttribute mezőt:
Public Class Group
<XmlElement> _
Public Employees() As Employee
End Class
public class Group {
[XmlElement]
public Employee[] Employees;
}
A szerializált példányok a következő kódhoz hasonlíthatnak:
<Group>
<Employees>
<Name>Haley</Name>
</Employees>
<Employees>
<Name>Noriko</Name>
</Employees>
<Employees>
<Name>Marco</Name>
</Employees>
</Group>
A két XML-adatfolyam megkülönböztetésére az XML-sémadefiníciós eszköz használatával hozhatja létre az XML-séma (XSD) dokumentumfájljait a lefordított kódból. Az eszköz használatáról további információt az XML-sémadefiníciós eszköz és az XML-szerializálás című témakörben talál. Ha nincs attribútum a mezőre alkalmazva, a séma az alábbi módon írja le az elemet:
<xs:element minOccurs="0" maxOccurs ="1" name="Employees" type="ArrayOfEmployee" />
Ha a XmlElementAttribute mezőre alkalmazza a rendszer, az eredményként kapott séma az alábbi módon írja le az elemet:
<xs:element minOccurs="0" maxOccurs="unbounded" name="Employees" type="Employee" />
Tömblista szerializálása
Az ArrayList osztály különböző objektumok gyűjteményét is tartalmazhatja. Ezért az ArrayList használata nagyon hasonló, mint egy tömbé. Ahelyett, hogy olyan mezőt hoz létre, amely gépelt objektumok tömbét adja vissza, létrehozhat egy olyan mezőt, amely egyetlen ArrayListértéket ad vissza. A tömbökhöz hasonlóan azonban tájékoztatnia kell a XmlSerializer-t arról, hogy a ArrayList milyen objektumtípusokat tartalmaz. Ehhez rendeljen több példányt a XmlElementAttribute mezőhöz, ahogy az az alábbi példában is látható.
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;
}
Osztályok szerializálásának szabályozása XmlRootAttribute és XmlTypeAttribute használatával
Csak osztályra alkalmazhat két attribútumot: XmlRootAttribute és XmlTypeAttribute. Ezek az attribútumok hasonlóak. Ez XmlRootAttribute csak egy osztályra alkalmazható: az osztályra, amely szerializált állapotban az XML-dokumentum nyitó és záró elemét, vagyis a gyökérelemet jelöli. A XmlTypeAttributerendszer azonban bármely osztályra alkalmazható, beleértve a gyökérosztályt is.
Az előző példákban például az Group osztály a gyökérosztály, és minden nyilvános mezője és tulajdonsága az XML-dokumentumban található XML-elemekké válik. Ezért csak egy gyökérosztályt használhat. A XmlRootAttribute alkalmazásával szabályozhatja a XmlSerializer által létrehozott XML-adatfolyamot. Módosíthatja például az elem nevét és a névteret.
Ez XmlTypeAttribute lehetővé teszi a létrehozott XML sémájának szabályozását. Ez a funkció akkor hasznos, ha közzé kell tennie a sémát egy XML-webszolgáltatáson keresztül. Az alábbi példa mind az XmlTypeAttribute osztályt, mind az XmlRootAttribute osztályt alkalmazza:
<XmlRoot("NewGroupName"), _
XmlType("NewTypeName")> _
Public Class Group
Public Employees() As Employee
End Class
[XmlRoot("NewGroupName")]
[XmlType("NewTypeName")]
public class Group {
public Employee[] Employees;
}
Ha ez az osztály lefordítva van, és az XML-sémadefiníciós eszközt használja a séma létrehozásához, a következő XML-leírást Groupfogja találni:
<xs:element name="NewGroupName" type="NewTypeName" />
Ezzel szemben, ha az osztály egy példányát szerializálná, csak NewGroupName az XML-dokumentumban található:
<NewGroupName>
. . .
</NewGroupName>
Szerializálás megakadályozása az XmlIgnoreAttribute használatával
Előfordulhat, hogy egy nyilvános tulajdonságot vagy mezőt nem kell szerializálni. Egy mező vagy tulajdonság például metaadatokat tartalmazhat. Ilyen esetekben alkalmazza a XmlIgnoreAttribute jelölőt a mezőre vagy tulajdonságra, és a XmlSerializer átugorja azt.