Сериализация записей ODSON в библиотеке OData v3 включает: "__metadata": {"id" - PullRequest
0 голосов
/ 03 февраля 2012

Используя библиотеку OData 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)] спецификация гласит:

Сериализация нотации объекта JavaScript (JSON) экземпляра EntityType МОЖЕТ <58> включать имя /пара значений с именем "_ метаданные".Эта пара имя / значение не является данными, но вместо этого, согласно соглашению, определенному в этом документе, указывает метаданные для экземпляра EntityType, который представляет объект JSON.Порядок этой пары имя / значение по отношению к другим парам имя / значение, которые представляют свойства, определенные для типа сущности, не имеет значения.В версии 1.0 и версии 2.0 протокола OData значение свойства " _metadata" содержит семь пар имя / значение: "uri", "type", "etag", "edit_media", "media_src", "media_etag "и" content_type ".В версии 3.0 протокола OData добавлены еще три пары имя / значение: «свойства», «действия» и «функции».Порядок этих пар имя / значение не имеет значения.Значение пары имя / значение "uri" ДОЛЖНО быть каноническим URI, идентифицирующим экземпляр EntityType, представленный объектом JSON.

Похоже, что текущий CTP библиотеки OData неправильно генерирует "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

Является ли библиотека просто неверной - или я что-то упускаю или неправильно ее использую?

Ответы [ 2 ]

1 голос
/ 10 апреля 2012

Начиная с 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)
1 голос
/ 10 февраля 2012

Спецификация V3 еще не завершена.Мы добавили свойство id в библиотеку OData, но оно еще не вошло в официальную спецификацию.Обратите внимание, что id и uri - это две разные вещи.

Свойство id является значением свойства ODataEntry.Id.Это должен быть глобально уникальный URI, идентифицирующий сущность.Это не обязательно должен быть действительный URL, поэтому, например, «urn: myentity: id1» вполне подойдет.Это то же значение, что и у элемента id в представлении ATOM.

Свойство uri является ссылкой редактирования или чтения.Таким образом, это значение ODataEntry.EditLink или, если оно пустое, это значение ODataEntry.ReadLink.Это должен быть действительный URL-адрес, который можно использовать для чтения и / или изменения объекта.

...