Typer som stöds av Data Contract Serializer
Windows Communication Foundation (WCF) använder DataContractSerializer som standard serialiseringsmotor för att konvertera data till XML och konvertera XML tillbaka till data. DataContractSerializer Är utformad för att serialisera datakontraktstyper. Det stöder dock många andra typer, som kan anses ha ett implicit datakontrakt. Följande är en fullständig lista över typer som kan serialiseras:
Alla offentligt synliga typer som har en konstruktor som inte har parametrar.
Datakontraktstyper. Det här är typer som DataContractAttribute attributet har tillämpats på. Nya anpassade typer som representerar affärsobjekt bör normalt skapas som datakontraktstyper. Mer information finns i Använda datakontrakt och serialiserbara typer.
Samlingstyper. Det här är typer som representerar listor med data. Det kan vara vanliga matriser med typer eller samlingstyper, till exempel ArrayList och Dictionary<TKey,TValue>. Attributet CollectionDataContractAttribute kan användas för att anpassa serialiseringen av dessa typer, men krävs inte. Mer information finns i Samlingstyper i datakontrakt.
Uppräkningstyper. Uppräkningar, inklusive flagguppräkningar, kan serialiseras. Du kan också markera uppräkningstyper med DataContractAttribute attributet, i vilket fall varje medlem som deltar i serialiseringen måste markeras med EnumMemberAttribute attributet. Medlemmar som inte är markerade serialiseras inte. Mer information finns i Uppräkningstyper i datakontrakt.
.NET Framework primitiva typer. Följande typer som är inbyggda i .NET Framework kan alla serialiseras och anses vara primitiva typer: Byte, SByte, Int32Int16, Int64, , UInt16, UInt32UInt64, Single, Double, , Boolean, Char, , Decimal, , Objectoch String.
Andra primitiva typer. Dessa typer är inte primitiver i .NET Framework utan behandlas som primitiver i det serialiserade XML-formuläret. Dessa typer är DateTime, DateTimeOffset, TimeSpan, Guid, Uri, och XmlQualifiedNamematriser för Byte.
Kommentar
Till skillnad från andra primitiva typer DateTimeOffset är inte en känd typ som standard. Mer information finns i Kända typer av datakontrakt).
Typer som har markerats med attributet SerializableAttribute . Många typer som ingår i basklassbiblioteket för .NET Framework tillhör den här kategorin. Den DataContractSerializer har fullt stöd för den här serialiseringsprogrammeringsmodellen som användes av .NET Framework-fjärrkommunikation, BinaryFormatter, och SoapFormatter, inklusive stöd för ISerializable gränssnittet.
Typer som representerar rå XML eller typer som representerar ADO.NET relationsdata. Matrisen XmlElement och XmlNode typerna stöds som ett sätt att representera XML direkt. Dessutom stöds typer som implementerar IXmlSerializable gränssnittet, inklusive det relaterade XmlSchemaProviderAttribute attributet och typerna XDocument och XElement . Den ADO.NETDataTable typen och DataSet typen (samt dess typbaserade härledda klasser) implementerar IXmlSerializable alla gränssnittet och passar därför in i den här kategorin. Mer information finns i XML och ADO.NET typer i datakontrakt.
Begränsningar för att använda vissa typer i partiellt förtroendeläge
Följande är en lista över begränsningar när du använder vissa typer i partiella säkerhetslägesscenarier:
För att serialisera eller deserialisera en typ som implementeras ISerializable i delvis betrodd kod med hjälp av DataContractSerializer kräver SerializationFormatter och UnmanagedCode behörigheter.
När du kör WCF-kod i läget Partiellt förtroende stöds inte serialisering och deserialisering av
readonly
fält (bådepublic
ochprivate
). Det beror på att den genererade IL:en inte kan verifieras och därför kräver utökade behörigheter.DataContractSerializer Både och XmlSerializer stöds i en partiell förtroendemiljö. Användning av DataContractSerializer är dock föremål för följande villkor:
Alla serialiserbara
[DataContract]
typer måste vara offentliga.Alla serialiserbara
[DataMember]
fält eller egenskaper i en[DataContract]
typ måste vara offentliga och läsa/skriva. Serialisering och deserialisering avreadonly
fält stöds inte när WCF körs i ett delvis betrott program.Programmeringsmodellen
[Serializable]
/ISerializable]
stöds inte i en partiell förtroendemiljö.Kända typer måste anges i kod- eller datornivåkonfiguration (
Machine.config
). Kända typer kan inte anges i konfiguration på programnivå av säkerhetsskäl.
Typer som implementerar IObjectReference utlöser ett undantag i en delvis betrodd miljö eftersom GetRealObject metoden kräver säkerhetsbehörigheten
[SecurityPermission(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.SerializationFormatter)]
.
Ytterligare anteckningar om serialisering
Följande regler gäller även för typer som stöds av Data Contract Serializer:
Generiska typer stöds fullt ut av datakontraktsserialiseraren.
Typer av null-värden stöds fullt ut av datakontraktsserialiseraren.
Gränssnittstyper behandlas antingen som Object eller, när det gäller samlingsgränssnitt, som samlingstyper.
Både strukturer och klasser stöds.
DataContractSerializer stöder inte den programmeringsmodell som används av XmlSerializer webbtjänsterna och ASP.NET. I synnerhet stöder den inte attribut som XmlElementAttribute och XmlAttributeAttribute. För att aktivera stöd för den här programmeringsmodellen måste WCF växlas för att använda XmlSerializer i stället för DataContractSerializer.
Typen DBNull behandlas på ett speciellt sätt. Det är en singleton-typ, och vid deserialisering respekterar deserialiseraren singleton-begränsningen och pekar alla
DBNull
referenser till singleton-instansen. EftersomDBNull
det är en serialiserbar typ kräver SerializationFormatter den behörighet.