我有一个案例,我有两条路线将为同一模型返回不同格式的 json。在一种情况下我想包括空值,在另一种情况下我不想。
我对此的解决方案是创建第二个 JsonSerializer 并直接在 NancyModule 中调用它,但我失去了协商的灵活性。不过,我想做的是将其 Hook 到谈判中,以便进行以下操作:
return Negotiate
.WithStatusCode(HttpStatusCode.OK)
.WithModel( MyModel)
**.WithSerializer( MyCustomerJsonSerializer)**
.WithView("MyView");
最佳答案
一种选择是创建您自己的 IResponseProcessor like the existing Json one 并注册它而不是默认的。在处理器中,确保根据路由使用不同的序列化程序(当前上下文在处理器中传递)。或者,您可以根据上下文的 Item 集合中的某些内容来决定使用哪个序列化程序。
这样,其中一个路由可以在上下文中设置一些东西,这将驱动处理器选择一个或另一个序列化器。
关于json.net - 通过协商更改 NancyModule 中的 json.net 配置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19321679/