簡體   English   中英

OData Library v3 JSON條目序列化包括:“__ metadata”:{“id”

[英]OData Library v3 JSON entry serialization includes: “__metadata”: { “id”

使用OData Library October '11 CTP使用v3序列化條目我得到以下內容:

{
    "d":{
        "__metadata": {
            "id":"http://dev.foo.bar/Statuses(7)",
            "type":"Presentation.Status"
        },
        "Description":"Testing..."
    }
}

在v3規范中,示例如下:

DataServiceVersion:3.0

{
    "d": {
        "__metadata": { 
            "uri": "Customers(\'ALFKI\')",
            "type": "SampleModel.Customer",
            ....

規范使用_ metadata / uri, Libary 使用“ _metadata / id”。 在[2.2.6.3.3實體類型(作為JSON對象)]一節中,規范說明:

EntityType實例MAY <58>的JavaScript Object Notation(JSON)序列化包括名為“_ metadata”的名稱/值對 此名稱/值對不是數據,而是按照本文檔中定義的約定,指定JSON對象表示的EntityType實例的元數據。 此名稱/值對與表示在實體類型上定義的屬性的其他名稱/值對的排序是無關緊要的。 在OData協議的1.0版和2.0版中,“ _ metadata”屬性的值包含七個名稱/值對:“uri”,“type”,“etag”,“edit_media”,“media_src”,“media_etag”,和“content_type”。 在OData協議的3.0版本中,增加了三個名稱/值對:“屬性”,“操作”和“功能”。 這些名稱/值對的順序無關緊要。 “uri”名稱/值對的值必須是標識由JSON對象表示的EntityType實例的規范URI。

看起來OData庫的當前CTP錯誤地發出“id”,它應該發出“uri”,就像uriNVP一樣 - 定義如下:

metadataNVP = quotation-mark "__metadata" quotation-mark
              name-seperator
              begin-object
              ( uriNVP
....

uriNVP = quotation-mark "uri" quotation-mark
             name-seperator
             quotation-mark resourcePath quotation-mark

圖書館是不正確的 - 或者我錯過了什么或使用不正確?

從5.0 RTM開始,JSON支持消失了嗎? WTF? 為什么以及如何取回?

if (((ODataVersion) settings.Version) == ODataVersion.V3)
{
    specifiedTypes = RemoveApplicationJsonFromAcceptableMediaTypes(specifiedTypes, mediaTypesForPayloadKind, settings.AcceptableMediaTypes);
}

這是來自的代碼

internal static ODataFormat GetContentTypeFromSettings(ODataMessageWriterSettings settings, ODataPayloadKind payloadKind, MediaTypeResolver mediaTypeResolver, out MediaType mediaType, out Encoding encoding)

V3規范尚未完成。 我們確實將id屬性添加到OData庫中,它還沒有進入官方規范。 請注意,id和uri是兩個不同的東西。

id屬性是ODataEntry.Id屬性的值。 它應該是標識實體的全局唯一URI。 它不必是有效的URL,因此例如“urn:myentity:id1”完全沒問題。 它與ATOM表示中的id元素的值相同。

uri屬性是編輯或讀取鏈接。 所以它是ODataEntry.EditLink的值,或者如果它為null,則它是ODataEntry.ReadLink的值。 這必須是有效的URL,可用於讀取和/或修改實體。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM