OData Library v3 JSON条目序列化包括:__元数据";:{quot;id";

OData Library v3 JSON条目序列化包括:__元数据";:{quot;id";,json,serialization,odata,Json,Serialization,Odata,使用OData库(2011年10月CTP)使用v3序列化条目,我得到以下结果: { "d":{ "__metadata": { "id":"http://dev.foo.bar/Statuses(7)", "type":"Presentation.Status" }, "Description":"Testing..." } } 在v3规范中,示例如下所示: DataServiceV

使用OData库(2011年10月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,库使用“_metadata/id”。在第[2.2.6.3.3节实体类型(作为JSON对象)]中,规范规定:

EntityType的JavaScript对象表示法(JSON)序列化 实例可能包括名为“\u metadata”的名称/值对 名称/值对不是数据,而是中定义的约定 此文档指定了要创建的EntityType实例的元数据 JSON对象表示。此名称/值对的顺序为 相对于表示以下属性的其他名称/值对: 在实体类型上定义的不重要。在版本1.0和 OData协议的2.0版,“\u元数据”的值 属性包含七个名称/值对:“uri”、“类型”、“etag”, “编辑媒体”、“媒体src”、“媒体etag”和“内容类型” OData协议的3.0版本中,还有三个名称/值对 增加:“属性”、“操作”和“功能”。这些操作的顺序 名称/值对不重要。“uri”名称/值的值 对必须是标识EntityType实例的规范URI 由JSON对象表示

看起来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

是库不正确?还是我遗漏了什么或使用不正确?

V3规范尚未完成。我们已将id属性添加到OData库中,但它尚未纳入正式规范。请注意,id和uri是两个不同的东西

id属性是ODataEntry.id属性的值。它应该是标识实体的全局唯一URI。它不必是有效的URL,因此例如“urn:myentity:id1”就可以了。它的值与ATOM表示中的id元素相同


uri属性是编辑或读取链接。因此,它是ODataEntry.EditLink的值,如果为空,则是ODataEntry.ReadLink的值。这必须是可用于读取和/或修改实体的有效URL。

从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)

你能在初始化正在编写的ODataEntry类上的属性的地方发布代码吗?你是在将其写入IODataResponseMessage还是IODataRequestMessage?发布后我发现这是由参数化控制的-所以我们现在可以工作了。我一开始无法更新此帖子。奇怪的是令人惊讶的是,JSON序列化会发出'id'属性(以及'uri',如果这样配置的话),即使它不是由OData指定的。