Partager via


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 demande GET 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

Autres ressources

ADO.NET Data Services Framework