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

Il formato JSON utilizzato da ADO.NET Data Services include i protocolli per la serializzazione dei dati applicati a tutte le risorse accessibili tramite il servizio.

Regole di serializzazione comuni a tutte le risorse

In questo argomento sono elencate le regole di serializzazione comuni a tutte le risorse di ADO.NET Data Services.

NoteNota

Molte complessità di serializzazione possono essere ridotte mediante una libreria che consente di eseguire la conversione da e verso il formato JSON. Per ulteriori informazioni, vedere CodePlex.

Valori Null

Tutti i valori Null devono essere rappresentati utilizzando il valore letterale 'null' JSON.

Set di entità

  • Un set di entità deve essere rappresentato come una matrice di oggetti JSON, con un oggetto per ogni istanza del tipo di entità all'interno del set.

  • Un set di entità vuoto deve essere rappresentato come una matrice JSON vuota, ovvero una matrice con zero elementi.

Tipo di entità

  • Un tipo di entità deve essere serializzato come un oggetto JSON.

  • Ogni proprietà del tipo deve essere rappresentata come una coppia nome/valore all'interno dell'oggetto. Nella coppia nome/valore, il nome corrisponde al nome della proprietà e il valore è il valore della proprietà. L'ordine nel quale le proprietà sono visualizzate all'interno di un oggetto non è importante.

  • La serializzazione JSON di un'istanza del tipo di entità deve includere una proprietà denominata __metadata. Questa proprietà non è di tipo dati e corrisponde a una convenzione definita in questo protocollo per specificare i metadati per una determinata istanza di un tipo. Il valore della proprietà __metadata contiene due proprietà: uri e type. La proprietà uri deve essere un URI che identifica l'istanza del tipo di entità corrente. Più specificatamente, l'URI deve essere relativo all'URI richiedente dopo avere rimosso l'ultimo segmento di percorso non vuoto. Il valore della proprietà 'Type' deve essere il nome completo dello spazio dei nomi, ad esempio namespaceName.typeName, del tipo che rappresenta l'istanza del tipo di entità nel server. La proprietà __metadata può contenere una proprietà etag. Se l'entità dispone di una proprietà etag definita, la proprietà etag deve essere presente.

    • Se il tipo di entità rappresentato dall'oggetto JSON fa parte di una gerarchia di ereditarietà, deve essere inclusa la proprietà Type. In caso contrario, la proprietà 'Type' è facoltativa.

    • Per ulteriori informazioni su quando sia necessaria, facoltativa o vietata la presenza dei parametri URI e type, vedere Requisiti HTTP comuni.

Tipo complesso

  • Un tipo complesso deve essere serializzato come un oggetto JSON.

  • Ogni proprietà del tipo complesso deve essere rappresentata come una coppia nome/valore all'interno dell'oggetto JSON. Nella coppia nome/valore, il nome corrisponde al nome della proprietà e il valore è il valore della proprietà. L'ordine nel quale le proprietà sono visualizzate all'interno di un oggetto non è importante.

Proprietà di navigazione e collegamento

  • La serializzazione delle proprietà di navigazione e collegamento sono posticipate per impostazione predefinita. Quando il contenuto è posticipato, la proprietà uri sotto l'elemento __deferred non contiene l'URI canonico. Per informazioni sull'espansione della proprietà, vedere Contenuto posticipato (JASON).

  • Poiché le proprietà di navigazione e collegamento rappresentano un'associazione a un set di entità correlato, la serializzazione di una proprietà di navigazione segue le stesse regole dei set di entità con l'eccezione seguente:

    • L'elemento XML di livello superiore deve corrispondere al nome della proprietà di navigazione o collegamento anziché al nome di un set di entità.

Proprietà

Una proprietà può essere serializzata in due modi: con un tag di wrapping o in una forma non decorata senza tag di wrapping.

Per utilizzare la serializzazione di una proprietà in JSON con tag di wrapping:

  • La serializzazione è rappresentata come una coppia nome/valore in un oggetto JSON, ad esempio, {<propertyname>:<propertyvalue>}.

  • La tabella riportata in questo documento illustra come viene formattato ogni tipo primitivo definito dal modello EDM (Entity Data Model) mediante JSON. La colonna di serializzazione JSON definisce come viene serializzato il valore di una proprietà.

Per utilizzare la serializzazione di una proprietà in JSON senza tag di wrapping (URI che terminano con /$value):

  • In questo formato viene serializzato solo il valore della proprietà. La colonna di serializzazione JSON della tabella seguente specifica come viene serializzato ogni tipo primitivo in questo formato.

  • Se il tipo ha valore Null o vuoto, questo formato non contiene serializzazioni del valore della proprietà. In questi casi il modello di interazione del protocollo deve segnalare l'esistenza di tali valori.

Tipo primitivo EDM Serializzazione JSON Rappresentazione con valore Null (solo con tag di wrapping) Rappresentazione con valore vuoto (solo con tag di wrapping)

Edm.Binary

Convert.ToBase64String(<bytes>, Base64FormattingOptions.None)

Non disponibile

matrice di dimensioni 0

Edm.Boolean

true | false

Non disponibile

Non disponibile

Edm.Byte

<short>.ToString(CultureInfo.InvariantCulture)

Non disponibile

Non disponibile

Edm.DateTime

\/Date(<ticks>)\/ <ticks>: numero di millisecondi a partire dal 1 gennaio 1970. Nota: questo formato è identico al formato utilizzato dal framework di ASP.NET AJAX. Per ulteriori informazioni, vedere DateTime. Per un esempio di utilizzo di ADO.NET Data Services, vedere HttpWebRequest POST (framework di ADO.NET Data Services).

Non disponibile

Non disponibile

Edm.Decimal

<Decimal>.ToString(CultureInfo.InvariantCulture). Nota: JSON non dispone di un tipo di dati Decimal; il valore è convertito in una stringa per impedire la perdita di dati.

Non disponibile

Non disponibile

Edm.Double

XmlConvert.ToString(<double>)

Non disponibile

Non disponibile

Edm.Guid

<Guid>. ToString() xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

Non disponibile

Non disponibile

Edm.Int16

<int16>.ToString(CultureInfo.InvariantCulture)

Non disponibile

Non disponibile

Edm.Int32

<int32>.ToString(CultureInfo.InvariantCulture)

Non disponibile

Non disponibile

Edm.Int64

<int64>.ToString(CultureInfo.InvariantCulture). Nota: restituito come stringa per impedire la perdita di dati a causa dell'utilizzo numerico limitato in JSON.

Non disponibile

Non disponibile

Edm.SByte

<short>.ToString(CultureInfo.InvariantCulture)

Non disponibile

Non disponibile

Edm.Single

XmlConvert.ToString(<float>). Se il valore è infinito, viene utilizzato 'infinity'.

Non disponibile

Non disponibile

Edm.String

<string>

null

""

Edm.UInt16

<uint16>.ToString(CultureInfo.InvariantCulture)

Non disponibile

Non disponibile

Edm.UInt32

<uint32>.ToString(CultureInfo.InvariantCulture)

Non disponibile

Non disponibile

Edm.UInt64

<uint64>.ToString(CultureInfo.InvariantCulture). Nota: restituito come stringa per impedire la perdita di dati a causa dell'utilizzo numerico limitato in JSON.

Non disponibile

Non disponibile

System.Data.Linq.Binary

Convert.ToBase64String(<binary>.ToArray(),Base64FormattingOptions.None)

Non disponibile

matrice di dimensioni 0

System.Data.Linq.XElement

<element>.ToString(System.Data.Linq.SaveOptions.None)

null

""

Vedere anche

Concetti

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