使用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的JavaScript Object Notation(JSON)序列化 实例MAY< 58>包括名为“_ 元数据”的名称/值对。这个 名称/值对不是数据,而是按照中定义的约定 本文档指定了EntityType实例的元数据 JSON对象表示。这个名称/值对的排序 相对于表示属性的其他名称/值对 在实体类型上定义的是无关紧要的。在版本1.0和 OData协议的2.0版,“ _metadata”的值 属性包含七个名称/值对:“uri”,“type”,“etag”, “edit_media”,“media_src”,“media_etag”和“content_type”。在 OData协议的3.0版本,还有三个名称/值对 补充:“属性”,“动作”和“功能”。这些顺序 名称/值对无关紧要。 “uri”名称/值的值 pair必须是标识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
图书馆是不正确 - 还是我错过了某些内容或使用不正确?
答案 0 :(得分:1)
V3规格尚未完成。我们确实将id属性添加到OData库中,它还没有进入官方规范。请注意,id和uri是两个不同的东西。
id属性是ODataEntry.Id属性的值。它应该是标识实体的全局唯一URI。它不必是有效的URL,因此例如“urn:myentity:id1”完全没问题。它与ATOM表示中的id元素的值相同。
uri属性是编辑或读取链接。所以它是ODataEntry.EditLink的值,或者如果它为null,则它是ODataEntry.ReadLink的值。这必须是一个有效的URL,可用于读取和/或修改实体。
答案 1 :(得分:1)
从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)