Verzögerte Inhalte (JSON ADO.NET Data Services-Framework)
Die in einer Antwort von ADO.NET Data Services zurückgegeben Daten können mitunter äußerst umfangreich sein. Um Bandbreite oder CPU-Zyklen einzusparen, geben Datendienste möglicherweise nicht die vollständige Antwort auf eine Anforderung zurück. In ADO.NET Data Services kann das Senden fast aller Abschnitte einer Antwort verzögert werden. Dabei ist es wahrscheinlich, dass die Serialisierung der Navigationseigenschaften oder großer Eigenschaftswerte (wie z. B. BLOBS oder Bilder) verzögert wird.
Im folgenden Beispiel wird aufgezeigt, wie in ADO.NET Data Services verzögerte Inhalte angegeben werden, für die eine JSON-Serialisierung verwendet wird. Wenn beispielsweise die beiden Entitätstypen Customer
und Order
vorhanden sind und ein Kunde mehreren Bestellungen zugeordnet ist, erfolgt die Standardserialisierung einer Customer
-Entität folgendermaßen:
{ "d":
{
__metadata: {
uri: "Customers(\'NTSOS\')", type: "NorthwindModel.Customers"
}, CustomerID: "NTSOS", CompanyName: "Contoso Ltd",
Address: "1010 Street", Orders: {
__deferred: {
uri: "Customers(\'NTSOS\')/Orders"
}
}
}
}
Die __deferred
-Eigenschaft in diesem Beispiel gibt an, dass die Werte von Order
-Elementen nicht zurückgegeben werden. Um die Werte abzurufen, muss eine GET
-Anforderung direkt für Customers(\'NTSOS\')/Orders
durchgeführt werden.
Regeln für verzögerte Inhalte in JSON
Die Verwendung von verzögerten Inhalten in ADO.NET Data Services erfolgt anhand der folgenden Regeln, wenn eine JSON-Serialisierung verwendet wird:
Die Inhalte der vom
__deferred
-Befehl mit einer Anmerkung versehenen Eigenschaft werden bei der Serialisierung nicht zurückgegeben. Die Inhalte können abgerufen werden, indem für das übergeordnete Element eineGET
-Anforderung durchgeführt wird. Außerdem kann die Abfrageoption$expand
eingefügt werden, um eine Verzögerung zu verhindern. Weitere Informationen finden Sie unter ADO.NET Data Services-Systemabfrageoptionen.Bei der Eigenschaft
__deferred
darf es sich nicht um eine Eigenschaft des äußersten Objekts handeln, es sei denn, dieses verfügt über keine anderen Eigenschaften.Die Eigenschaft
__deferred
impliziert nicht, dass Inhalte verzögert wurden. Sie gibt an, dass mögliche Inhalte noch nicht ausgewertet oder serialisiert wurden.In der Standardeinstellung wird in ADO.NET Data Services die Serialisierung folgender Arten von Daten verzögert:
Navigationseigenschaftswerte
Linkwerte
Eigenschaftswerte vom Typ
Edm.Binary
Eigenschaftswerte vom Typ
EdmType.Binary
können nicht verzögert werden.
Beispiele
Im nächsten Beispiel wird die JSON-Serialisierung einer leeren Customers
-Entitätenmenge aufgezeigt:
{ "d": [ ] }
Im folgenden Beispiel wird die JSON-Serialisierung einer Customers
-Entitätenmenge aufgezeigt, die zwei Instanzen des Entitätstpys Customer
enthält. Die Customers
-bezogenen Bestellungen werden nicht inline erweitert. Hierbei handelt es sich um das Standardverhalten.
{ "d": [
{
__metadata: {
uri: "Customers(\'NTSOS\')", type: "NorthwindModel.Customer"
},
CustomerID: "NTSOS",
CompanyName: "Contoso Ltd",
Address: "1010 Street",
Orders: {
__deferred: {
uri: "Customers(NTSOS)/Orders"
}
}
},
{
__metadata: {
uri: "Customers(FABRK)", type: "NorthwindModel.Customer"
},
CustomerID: "FABRK",
CompanyName: "Fabrikam Inc",
"2020 Street",
Orders: {
__deferred: {
uri: "Customers(\'FABRK\')/Orders"
}
},
}
]
}
Im folgenden Beispiel wird die JSON-Serialisierung eines Customer
-Entitätstyps aufgezeigt, der alle verwandten, inline serialisierten Orders
enthält.
{ "d":
{
__metadata: {
uri: "Customers(NTSOS)", type: "NorthwindModel.Customer"
},
CustomerID: "NTSOS",
CompanyName: "Contoso Ltd",
Address: "1010 Street",
Orders: [
{
__metadata: {
uri: "Customers(NTSOS)/Orders",
type: "NorthwindModel.Order"
},
ShippedDate: "\/Date(1202321)\/",
ShipAddress: "1010 Street",
Customers: {
__deferred: {
Uri: "Customers(\'NTSOS\')/Orders/Customers"
}
}
]
}
}
Im folgenden Beispiel wird die JSON-Serialisierung einer einzelnen Customer
-Entitätstypinstanz aufgezeigt, die als Unternehmensnamen eine leere Zeichenfolge und die Adresseigenschaft NULL aufweist:
{ "d":
{
__metadata: {
uri: "Customers(NTSOS)", type: "NorthwindModel.Customer"
},
CustomerID: "NTSOS",
CompanyName: "Contoso Ltd",
Address: null,
Orders: {
__deferred: {
uri: "Customers(NTSOS)/Orders"
}
}
}
}
Im nächsten Beispiel wird eine JSON-Serialisierung der CustomerID
-Eigenschaft für einen Customer
-Entitätstyp aufgezeigt, bei dem der Eigenschaftstyp eine Zeichenfolge mit dem Wert NTSOS
ist:
"NTSOS"
Dieses Beispiel entspricht dem vorherigen JSON-Beispiel, wobei die angeforderte Serialisierung für den Wert ohne zusätzliche Metadaten gilt. Es sind keine umgebenden JSON-Markups vorhanden.
NTSOS
Siehe auch
Konzepte
JSON-Serialisierungsregeln (ADO.NET Data Services-Framework)
JSON-Format (ADO.NET Data Services-Framework)
Clientanwendungen von ADO.NET Data Services
Weitere Ressourcen
ADO.NET Data Services Framework