Contenu différé (JSON ADO.NET Data Services Framework)
Les données retournées dans la réponse d'ADO.NET Data Services peuvent parfois être volumineuses. Afin de préserver de la bande passante ou des cycles de processeur, un service de données peut ne pas retourner la réponse complète à une demande. ADO.NET Data Services peut différer l'envoi de quasiment toute section d'une réponse ; il est probable qu'ADO.NET Data Services diffère la sérialisation des propriétés de navigation ou des grandes valeurs de propriétés telles que les objets BLOB ou les images.
L'exemple suivant illustre la manière dont ADO.NET Data Services indique le contenu différé qui utilise la sérialisation JSON. Lorsqu'il y a deux types d'entités, par exemple Customer
et Order
, et qu'un même client est associé à de nombreuses commandes, la sérialisation par défaut d'une entité Customer
est la suivante :
{ "d":
{
__metadata: {
uri: "Customers(\'NTSOS\')", type: "NorthwindModel.Customers"
}, CustomerID: "NTSOS", CompanyName: "Contoso Ltd",
Address: "1010 Street", Orders: {
__deferred: {
uri: "Customers(\'NTSOS\')/Orders"
}
}
}
}
La propriété __deferred
dans cet exemple signifie que les valeurs des éléments Order
ne sont pas retournées. Pour extraire les valeurs, vous devez envoyer une demande GET
directement à Customers(\'NTSOS\')/Orders
.
Règles de contenu différé dans JSON
Les règles suivantes régissent l'utilisation du contenu différé dans ADO.NET Data Services lors de l'utilisation de la sérialisation JSON :
Le contenu de la propriété annotée par la commande
__deferred
n'est pas retourné dans la sérialisation. Le demandeur peut extraire le contenu en effectuant une demandeGET
concernant l'élément parent. Il peut également inclure l'option de requête$expand
afin d'éviter le différé. Pour plus d'informations, consultez Options de requête système d'ADO.NET Data Services.La propriété
__deferred
ne doit pas être une propriété de l'objet le plus extérieur, à moins que celui-ci ne contienne aucune autre propriété.La propriété
__deferred
n'implique pas qu'un contenu est différé. Elle indique qu'un contenu possible n'a pas encore été évalué ou sérialisé.Par défaut, ADO.NET Data Services diffère la sérialisation des types de données suivants :
Valeurs de propriétés de navigation.
Valeurs de liens.
Valeurs de propriétés du type
Edm.Binary
.
Les valeurs de propriétés du type
EdmType.Binary
ne peuvent pas être différées.
Exemples
L'exemple suivant illustre la sérialisation JSON d'un jeu d'entités Customers
vide :
{ "d": [ ] }
L'exemple suivant illustre la sérialisation JSON d'un jeu d'entités Customers
qui contient deux instances du type d'entité nommé Customer
. Les commandes liées à Customers
ne sont pas étendues inline, ce qui constitue le comportement par défaut.
{ "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"
}
},
}
]
}
L'exemple suivant illustre la sérialisation JSON d'un type d'entité Customer
qui contient tous les éléments Orders
connexes sérialisés inline.
{ "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"
}
}
]
}
}
L'exemple suivant illustre la sérialisation JSON d'un type d'entité Customer
unique qui possède une chaîne vide comme nom de société et dont la propriété d'adresse est nulle :
{ "d":
{
__metadata: {
uri: "Customers(NTSOS)", type: "NorthwindModel.Customer"
},
CustomerID: "NTSOS",
CompanyName: "Contoso Ltd",
Address: null,
Orders: {
__deferred: {
uri: "Customers(NTSOS)/Orders"
}
}
}
}
L'exemple suivant illustre la sérialisation JSON de la propriété CustomerID
sur un type d'entité Customer
, où le type de la propriété est une chaîne et la valeur est NTSOS
.
"NTSOS"
Cet exemple est identique à l'exemple JSON précédent, hormis le fait que la sérialisation demandée concerne la valeur sans métadonnées supplémentaires ; il n'y a pas de balisage JSON englobant.
NTSOS
Voir aussi
Concepts
Règles de sérialisation JSON (ADO.NET Data Services Framework)
Format JSON (ADO.NET Data Services Framework)
Applications clientes d'ADO.NET Data Services