JSON 序列化规则(ADO.NET 数据服务框架)

ADO.NET 数据服务使用的 JSON 格式包括对可通过此服务访问的所有资源应用的数据序列化协议。

所有资源常用的序列化规则

本主题中列出了 ADO.NET 数据服务中的所有资源常用的序列化规则。

Note注意

通过使用一个可来回转换 JSON 格式的库,可以在很多方面降低序列化的复杂性。有关更多信息,请参见 CodePlex

Null 值

必须使用 JSON 文本“null”表示所有 null 值。

实体集

  • 必须将实体集表示为一个 JSON 对象数组,该集中的每个实体类型实例对应于数组中的一个对象。

  • 必须将空实体集表示为一个空 JSON 数组;即,一个包含零个元素的数组。

实体类型

  • 必须将实体类型序列化为 JSON 对象。

  • 必须将类型上的每个属性表示为对象内的一个名称/值对。名称/值对中的名称为属性的名称,值为属性的值。属性在对象中的显示顺序并不重要。

  • 实体类型实例的 JSON 序列化必须包含一个名为 __metadata 的属性。此属性不是数据,而是本协议中定义的约定,用于指定特定类型实例的元数据。__metadata 属性的值包含两个属性:uritypeuri 属性必须是一个标识当前实体类型实例的 URI。更具体地说,在删除最后一个非空路径段后,此 URI 必须是相对于请求 URI 的。'Type' 属性的值必须是表示服务器上的实体类型实例的类型的命名空间限定名,例如 namespaceName.typeName__metadata 属性可能包含 etag 属性。如果实体已定义一个 etag 属性,则必须存在 etag 属性

    • 如果 JSON 对象表示的实体类型是继承层次结构的一部分,则必须包含 Type 属性。如果不是,则 'Type' 属性是可选的。

    • 有关 URItype 参数在什么情况下必须、可能和不得出现的其他详细信息,请参见一般 HTTP 要求

复杂类型

  • 必须将复杂类型序列化为 JSON 对象。

  • 必须将复杂类型的每个属性表示为 JSON 对象内的一个名称/值对。名称/值对中的名称为属性的名称,值为属性的值。属性在对象中的显示顺序并不重要。

导航属性和链接属性

  • 默认情况下,导航属性和链接属性的序列化将被延迟。当延迟内容时,__deferred 元素下的 uri 属性不包含规范 URI。有关如何扩展此属性的信息,请参见延迟的内容 (JASON)

  • 由于导航属性和链接属性表示一个与相关实体集的关联,因此序列化导航属性时应遵循与实体集相同的规则,以下情况除外:

    • 顶级 XML 元素必须匹配导航或链接属性的名称,而不是实体集的名称。

属性

可以按两种方式序列化属性:使用包装标记,或按照未修饰形式而不使用任何包装标记。

使用包装标记将属性序列化为 JSON:

  • 此序列化表示为 JSON 对象内的一个名称/值对,如 {<propertyname>:<propertyvalue>}

  • 本文档中的表演示如何使用 JSON 设置实体数据模型 (EDM) 定义的每个基元类型的格式。JSON 序列化列定义如何序列化属性值。

将属性序列化为 JSON,而不使用包装标记(URI 以 /$value 结尾):

  • 使用此形式时,仅序列化属性的值。下表中的 JSON 序列化列指定如何按照此形式序列化每个基元类型。

  • 如果类型的值为 null 或空,则不按照此形式对属性的值进行序列化。在此情况下,协议的交互模型必须发出此值存在的信号。

EDM 基元类型 JSON 序列化 Null 表示形式(仅使用包装标记) 空值表示形式(仅使用包装标记)

Edm.Binary

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

不可用

大小为 0 的数组

Edm.Boolean

true | false

不可用

不可用

Edm.Byte

<short>.ToString(CultureInfo.InvariantCulture)

不可用

不可用

Edm.DateTime

\/Date(<ticks>)\/ <ticks>: 自 1970 年 1 月 1 日以来经过的时间(毫秒)。注意:此格式与 ASP.NET AJAX 框架使用的格式相同。有关更多详细信息,请参见 DateTime。有关使用 ADO.NET 数据服务的示例,请参见 HttpWebRequest POST(ADO.NET 数据服务框架)

不可用

不可用

Edm.Decimal

<Decimal>.ToString(CultureInfo.InvariantCulture). 注意:JSON 不具有 Decimal 数据类型;此值将转换为一个字符串,以防数据丢失。

不可用

不可用

Edm.Double

XmlConvert.ToString(<double>)

不可用

不可用

Edm.Guid

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

不可用

不可用

Edm.Int16

<int16>.ToString(CultureInfo.InvariantCulture)

不可用

不可用

Edm.Int32

<int32>.ToString(CultureInfo.InvariantCulture)

不可用

不可用

Edm.Int64

<int64>.ToString(CultureInfo.InvariantCulture). 注意:作为一个字符串返回,以防由于 JSON 数字限制而导致数据丢失。

不可用

不可用

Edm.SByte

<short>.ToString(CultureInfo.InvariantCulture)

不可用

不可用

Edm.Single

XmlConvert.ToString(<float>). 如果值为无穷大,则使用“infinity”。

不可用

不可用

Edm.String

<string>

null

""

Edm.UInt16

<uint16>.ToString(CultureInfo.InvariantCulture)

不可用

不可用

Edm.UInt32

<uint32>.ToString(CultureInfo.InvariantCulture)

不可用

不可用

Edm.UInt64

<uint64>.ToString(CultureInfo.InvariantCulture). 注意:作为一个字符串返回,以防由于 JSON 数字限制而导致数据丢失。

不可用

不可用

System.Data.Linq.Binary

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

不可用

大小为 0 的数组

System.Data.Linq.XElement

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

null

""

另请参见

概念

JSON 格式(ADO.NET 数据服务框架)
延迟的内容(JSON ADO.NET 数据服务框架)
ADO.NET 数据服务框架