我目前正在尝试使用WCF数据服务作为一种方式来开放我们的产品,同时能够使用来自AJAX的数据。我注意到的一件事是JSON代表格式将这些__metada成员分散在数据中,并且在OData文档中我发现了这个(在Representing Entries下):
可选的“__metadata”名称/值 对是唯一应该是的一对 包含在没有的对象上 直接代表一个属性 进入代表。这个 名称/值对不是数据,但是 相反,按照惯例在此定义 document,指定元数据 条目被代表。
我的问题是,如果此元数据是可选的,如何将其关闭以节省带宽?
答案 0 :(得分:2)
您是对的,WCF数据服务服务器实现无法发送__metadata。协议使其成为可选的这一事实并不意味着特定的实现不会始终发送它。在这种情况下,服务器生成__metadata,因为它可能包含客户端的重要信息,并且没有有效负载可能没有意义或提供不完整的信息。 目前,服务器也没有提供任何更改此行为的选项。
答案 1 :(得分:0)
在Reflector中花了一些时间后,看起来唯一的方法是编写我自己的System.Data.Services.Serializers.JsonSerializer版本。写入metada对象WriteMetadataObject的方法是从WriteComplexTypeProperties和WriteElementWithName调用的,而不考虑任何会跳过该部分的设置。
现在我必须考虑编写一个将写出所需JSON的序列化程序,并使用自定义$格式名称将其挂接到管道中的工作量。