5

我目前正在尝试使用 WCF 数据服务作为一种方式来更多地打开我们的产品,同时能够使用来自 AJAX 的数据。我注意到的一件事是 JSON 表示格式有这些 __metada 成员散布在数据中,并且在 OData 文档中我发现了这一点(在Representing Entries下):

可选的“__metadata”名称/值对是唯一应该包含在对象中的对,它不直接表示正在表示的条目的属性。此名称/值对不是数据,而是按照本文档中定义的约定,指定正在表示的条目的元数据。

我的问题是,如果此元数据是可选的,我该如何关闭它以节省带宽?

4

2 回答 2

2

您是对的,WCF 数据服务服务器实现没有能力不发送 __metadata。协议使其成为可选的事实并不意味着特定的实现不会总是发送它。在这种情况下,服务器会生成 __metadata,因为它可能包含客户端的重要信息,如果没有有效负载,可能没有意义或提供不完整的信息。目前服务器也没有提供任何选项来改变这种行为。

于 2010-08-16T15:50:13.850 回答
0

在 Reflector 中花了一些时间之后,看起来唯一的方法就是编写我自己的 System.Data.Services.Serializers.JsonSerializer 版本。写入元数据对象的方法 WriteMetadataObject 是从 WriteComplexTypeProperties 和 WriteElementWithName 调用的,而不考虑任何会跳过该部分的设置。

现在我必须考虑编写一个序列化程序来写出所需的 JSON 并使用自定义 $format 名称将其挂接到管道中需要做多少工作。

于 2010-08-16T12:17:31.273 回答