我在运行WCF数据服务5.5的自托管WCF ODATA服务中设置了数据实体POCO。
数据实体有几个字符串属性,通常为null。我想在它们为null时抑制这些属性的输出,以减少穿过电线的数据的大小。
[DataServiceEntity]
[DataServiceKey("Id")]
public class MyData
{
public string Id { get; set; }
[System.Runtime.Serialization.DataMember(EmitDefaultValue=false)]
public string Description { get; set; }
}
DataMember(EmitDefaultValue = false)
似乎对数据实体序列化没有影响:
{
"Id":"test4",
"Description":null
}
如何说服WCF数据服务禁止该null属性?
答案 0 :(得分:0)
您知道ASP.NET WEB API OData提供程序吗? http://www.nuget.org/packages/Microsoft.AspNet.WebApi.OData
您可以编写自己的序列化程序。 (从ODataFeedSerializer继承) ODataEntry类具有名为“Properties”的键/值属性。您可以尝试清除那里的空属性。
答案 1 :(得分:0)
它看起来如此困难的一个原因是它不是一个实现问题,而是一个规范问题。我很快就完成了OData规范(核心/协议和JSON详细/轻量级)并且没有提到属性遗漏,除非在明显的地方使用PATCH
。
正确扫描文档可能会显示更准确的信息。
如果我是对的,那么你不会想要省略这些,因为它可能会混淆你无法控制的客户。如果您控制所有客户端并且您确定将保留该控制权,那么您可能会破解某些内容,但我会将此黑客视为不兼容的OData扩展(包含所有这些)。
最好的做法是验证这一点,如果相关,则建议对下一版协议进行改进。 OData mailing list可能会有所帮助。