Reglas de serialización de JSON (marco de trabajo de los servicios de datos de ADO.NET)

El formato JSON que usan los servicios de datos de ADO.NET incluye protocolos para la serialización de los datos que se aplican a todos los recursos a los que se puede tener acceso mediante el servicio.

Reglas de serialización comunes a todos los recursos

Las reglas de serialización comunes a todos los recursos de los servicios de datos de ADO.NET se enumeran en este tema.

Nota

Muchas de las complejidades de la serialización Atom se pueden reducir mediante el uso de una biblioteca que convierta al formato JSON y desde éste. Para obtener más información, vea CodePlex.

valores NULL

Todos los valores NULL se deben representar mediante el literal JSON 'NULL'.

Conjunto de entidades

  • Un conjunto de entidades se debe representar como matriz de objetos JSON, con un objeto para cada instancia de tipo de entidad dentro del conjunto.

  • Un conjunto de entidades vacío se debe representar como matriz JSON vacía; es decir, una matriz con cero elementos.

Tipo de entidad

  • El tipo de una entidad se debe serializar como objeto JSON.

  • Cada propiedad del tipo se debe representar como par nombre-valor en el objeto. El nombre del par nombre-valor es el de la propiedad y su valor, el de la propiedad. El orden en el que aparecen las propiedades en un objeto no es importante.

  • La serialización de JSON de una instancia de tipo de entidad debe incluir una propiedad denominada __metadata. Esta propiedad no contiene datos, sino una convención definida en este protocolo para especificar los metadatos de una instancia específica de un tipo. El valor de la propiedad __metadata contiene dos propiedades: uri y type. La propiedad uri debe ser un URI que identifique la instancia de tipo de entidad actual. Más específicamente, el URI debe ser relativo respecto al URI solicitante después de quitar el último segmento de URI que no esté vacío. El valor de la propiedad 'Type' debe ser el nombre completo del espacio de nombres, como namespaceName.typeName, del tipo que represente la instancia de tipo de entidad en el servidor. La propiedad __metadata puede contener una propiedad etag. La propiedad etag debe estar presente si la entidad tiene una propiedad etag definida

    • La propiedad Type debe estar incluida si el tipo de entidad representada por el objeto JSON forma parte de una jerarquía de herencia. De lo contrario, la propiedad 'Type' es opcional.

    • Para obtener más detalles sobre cuándo deben, pueden o no deben estar presentes los parámetros URI y type, vea Requisitos HTTP comunes.

Tipo complejo

  • Se debe serializar un tipo complejo como objeto JSON.

  • Cada propiedad del tipo complejo se debe representar como par nombre-valor en el objeto JSON. El nombre del par nombre-valor es el de la propiedad y su valor, el de la propiedad. El orden en el que aparecen las propiedades en un objeto no es importante.

Propiedad de navegación y propiedad de vínculo

  • De forma predeterminada, la serialización de las propiedades de navegación y de vínculo se aplaza. Cuando se aplaza el contenido, la propiedad uri del elemento __deferred no contiene el URI canónico. Para obtener información sobre cómo expandir la propiedad, vea Contenido aplazado (JASON).

  • Puesto que las propiedades de navegación y de vínculo representan una asociación a un conjunto de entidades relacionado, la serialización de la propiedad de navegación sigue las mismas reglas que los conjuntos de entidades con la siguiente excepción:

    • El elemento XML de nivel superior debe coincidir con el nombre de la propiedad de navegación o de vínculo en vez de hacerlo con el de un conjunto de entidades.

Propiedad

Una propiedad se puede serializar de dos formas: con ajuste de marcado o en formato no representativo sin ningún ajuste de marcado.

Para usar la serialización de una propiedad en JSON con ajuste de marcado:

  • La serialización se representa como par nombre-valor en un objeto JSON, por ejemplo, {<propertyname>:<propertyvalue>}.

  • La tabla de este documento muestra cómo aplicar formato a cada tipo primitivo definido por Entity Data Model (EDM) mediante JSON. La columna de serialización de JSON define cómo se serializa un valor de propiedad.

Para utilizar la serialización de una propiedad en JSON sin marcado de ajuste (los URI que terminan en /$value):

  • En este formulario, sólo se serializa el valor de la propiedad. La columna de serialización de JSON de la tabla siguiente especifica cómo se serializa cada tipo primitivo de este formulario.

  • Si el valor del tipo es NULL o está vacío, no hay serialización del valor de la propiedad de este formulario. En casos como éste, el modelo de la interacción del protocolo debe señalar la existencia de tales valores.

Tipo primitivo EDM Serialización de JSON Representación de NULL (sólo con ajuste de marcado) Representación de valor vacío (sólo con ajuste de marcado)

Edm.Binary

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

No disponible

matriz de tamaño 0

Edm.Boolean

true | false

No disponible

No disponible

Edm.Byte

<short>.ToString(CultureInfo.InvariantCulture)

No disponible

No disponible

Edm.DateTime

\/Date(<ticks>)\/ <ticks>: número de milisegundos desde el 1 de enero de 1970. Nota: este formato es el mismo utilizado por el marco de trabajo de ASP.NET AJAX. Vea DateTime para obtener más detalles. Para obtener un ejemplo utilizando los servicios de datos de ADO.NET Datos, vea HttpWebRequest POST (marco de trabajo de los servicios de datos de ADO.NET).

No disponible

No disponible

Edm.Decimal

<Decimal>.ToString(CultureInfo.InvariantCulture). Nota: JSON no tiene un tipo de datos Decimal; el valor se convierte en una cadena para evitar la pérdida de datos.

No disponible

No disponible

Edm.Double

XmlConvert.ToString(<double>)

No disponible

No disponible

Edm.Guid

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

No disponible

No disponible

Edm.Int16

<int16>.ToString(CultureInfo.InvariantCulture)

No disponible

No disponible

Edm.Int32

<int32>.ToString(CultureInfo.InvariantCulture)

No disponible

No disponible

Edm.Int64

<int64>.ToString(CultureInfo.InvariantCulture). Nota: se devuelve como cadena para evitar la pérdida de datos debida a las limitaciones de número de JSON.

No disponible

No disponible

Edm.SByte

<short>.ToString(CultureInfo.InvariantCulture)

No disponible

No disponible

Edm.Single

XmlConvert.ToString(<float>). Si el valor es infinito, se usa 'infinity'.

No disponible

No disponible

Edm.String

<string>

NULL

""

Edm.UInt16

<uint16>.ToString(CultureInfo.InvariantCulture)

No disponible

No disponible

Edm.UInt32

<uint32>.ToString(CultureInfo.InvariantCulture)

No disponible

No disponible

Edm.UInt64

<uint64>.ToString(CultureInfo.InvariantCulture). Nota: se devuelve como cadena para evitar la pérdida de datos debida a las limitaciones de número de JSON.

No disponible

No disponible

System.Data.Linq.Binary

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

No disponible

matriz de tamaño 0

System.Data.Linq.XElement

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

NULL

""

Vea también

Conceptos

Formato JSON (marco de trabajo de los servicios de datos de ADO.NET)
Contenido aplazado (marco de trabajo de los servicios de datos de ADO.NET, JSON)
Marco de trabajo de los servicios de datos de ADO.NET