Contenuto posticipato (framework di ADO.NET Data Services in JSON)

I dati restituiti nella risposta di ADO.NET Data Services a volte possono essere di grandi dimensioni. Per la conservazione della larghezza di banda o dei cicli della CPU, un servizio dati potrebbe non restituire la risposta completa a una richiesta. In ADO.NET Data Services può essere rinviato l'invio di qualsiasi sezione di una risposta; è probabile che venga rinviata la serializzazione delle proprietà di navigazione o dei valori di proprietà di grandi dimensioni, quali BLOB o immagini.

Nell'esempio seguente viene illustrato come indicare un contenuto posticipato che utilizza la serializzazione JSON in ADO.NET Data Services. Quando sono presenti due tipi di entità, ad esempio Customer e Order, in cui un cliente singolo viene associato a molti ordini, la serializzazione predefinita di un'entità Customer è la seguente:

{ "d":
 { 
    __metadata: {
        uri: "Customers(\'NTSOS\')", type: "NorthwindModel.Customers"
    }, CustomerID: "NTSOS", CompanyName: "Contoso Ltd",
        Address: "1010 Street", Orders: {
        __deferred: {
            uri: "Customers(\'NTSOS\')/Orders" 
        }
    }
 }
}

La proprietà __deferred di questo esempio indica che i valori degli elementi Order non vengono restituiti. Per recuperare i valori, è necessario eseguire una richiesta GET direttamente a Customers(\'NTSOS\')/Orders.

Regole di contenuto posticipato in JSON

Le regole seguenti determinano l'utilizzo di contenuto posticipato in ADO.NET Data Services con la serializzazione JSON:

  • Il contenuto della proprietà annotato dal comando __deferred non viene restituito nella serializzazione. Il richiedente può recuperare il contenuto eseguendo una richiesta GET sull'elemento padre. Il richiedente può inoltre includere l'opzione query $expand per evitare il rinvio. Per ulteriori informazioni, vedere Opzioni query del sistema ADO.NET Data Services.

  • La proprietà __deferred non deve essere una proprietà dell'oggetto più esterno a meno che l'oggetto più esterno non contenga altre proprietà.

  • La proprietà __deferred non implica la presenza di contenuto posticipato; indica che il contenuto possibile non è stato ancora valutato o serializzato.

  • Per impostazione predefinita, in ADO.NET Data Services viene posticipata la serializzazione dei tipi di dati seguenti:

    • Valori della proprietà di navigazione.

    • Valori di collegamento.

    • Valori di proprietà di tipo Edm.Binary.

  • I valori di proprietà di tipo EdmType.Binary non possono essere posticipati.

Esempi

Nell'esempio seguente viene illustrata la serializzazione JSON di un set di entità Customers vuoto:

{ "d": [ ] }

Nell'esempio seguente viene illustrata la serializzazione JSON di un set di entità Customers che contiene due istanze del tipo di entità denominato Customer. Gli ordini correlati a Customers non vengono espansi inline, che è il comportamento predefinito.

{ "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"
            }
        },
    }
  ]
}

Nell'esempio seguente viene illustrata la serializzazione JSON di un tipo di entità Customer che contiene tutti i tipi di entità Orders correlati con serializzazione 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"
                                }
                 }
                 ]
}
}

Nell'esempio seguente viene illustrata la serializzazione JSON di una singola istanza del tipo di entità Customer, che dispone di una stringa vuota come nome dell'azienda e la cui proprietà address è null:

{ "d": 
{
        __metadata: {
            uri: "Customers(NTSOS)", type: "NorthwindModel.Customer"
        }, 
        CustomerID: "NTSOS", 
        CompanyName: "Contoso Ltd", 
        Address: null,
        Orders: {
            __deferred: {
                uri: "Customers(NTSOS)/Orders"
            }
        }
}
}

Nell'esempio seguente viene illustrata la serializzazione JSON della proprietà CustomerID su un tipo di entità Customer, in cui il tipo della proprietà è una stringa e il valore è NTSOS:

"NTSOS"

Questo esempio è identico all'esempio JSON precedente, con l'eccezione che viene richiesta la serializzazione del valore senza metadati aggiuntivi; non esistono markup JSON circostanti.

NTSOS

Vedere anche

Concetti

Regole di serializzazione JSON (framework di ADO.NET Data Services)
Formato JSON (framework di ADO.NET Data Services)
Applicazioni client di ADO.NET Data Services

Altre risorse

ADO.NET Data Services Framework