使用NancyTinyIoC配置JsonNetSerializer和JsonNetBodyDeserializer我是Nancy的菜鸟。我一直将它用作生成RESTAPI的框架。我熟悉Json.NET,所以我一直在玩Nancy.Serialization.JsonNet包。我的目标:自定义JsonNetSerializer和JsonNetBodyDeserializer的行为(即更改设置)。具体来说,我想添加以下设置...varsettings=newJsonSerializerSettings{Formatting=Formatting.Indented};settings.Converters.Add(newStringEnumConverter{AllowIntegerValues=false,CamelCaseText=true});我想使用内置的TinyIoC容器来执行此自定义以避免继承链并限制由Nancy.Serialization.JsonNet包中的任何更改引起的潜在问题。注意:作为临时解决方法,我利用继承来创建CustomJsonNetSerializer和CustomJsonNetBodyDeserializer。我已经尝试了几种方法来至少为JsonNetSerializer集成此配置。我还没有尝试使用TinyIoC配置JsonNetBodyDeserializer。我想它会以同样的方式完成。我尝试过的所有内容都适用于我的CustomNancyBootstrapper(它继承自DefaultNancyBootstrapper)。迄今为止最成功的方法:OverrideConfigureApplicationContainerprotectedoverridevoidConfigureApplicationContainer(TinyIoCContainercontainer){base.ConfigureApplicationContainer(container);//可能不需要两个注册,我试过只保留一个或另一个varsettings=newJsonSerializerSettings{Formatting=Formatting.Indented};settings.Converters.Add(newStringEnumConverter{AllowIntegerValues=false,CamelCaseText=true});container.Register(newJsonNetSerializer(JsonSerializer.CreateDefault(settings)));JsonNetSerializer(JsonSerializer.CreateDefault(设置)));我跟踪了代码并观察了JsonNet包中的JsonNetSerializer(JsonSerializerserializer)构造函数。潜在问题:我注意到构造函数被调用了两次。我没想到会有这种行为。第一次一切都恰到好处-我的自定义已正确添加和注册。然而,第二次发生并且类型被重新注册时,没有设置自定义。重新注册似乎取代了丢失我的设置自定义的原始注册。第二次调用构造函数时,调用堆栈显示它是在GetEngine和GetEngineInternal期间调用的,这似乎是在尝试构建NancyEngine(我正在使用自主包,所以这发生在program.cs-using(varhost=new南希主机(uri)))。看来我需要告诉南希不要做某事,或者我需要连接到链的后面部分。任何帮助将不胜感激。通常,在Nancy中解决这个问题的方法是实现自己的JSON序列化程序,如下所示:Converters.Add(newStringEnumConverter{AllowIntegerValues=false,CamelCaseText=true});格式化=格式化。缩进;在这里你可以覆盖所有设置。然后你可以注册它,我通过使用IRegistrationspublicclassJsonRegistration来完成:}}publicIEnumerableCollectionTypeRegistrations{get;保护集;}publicIEnumerableInstanceRegistrations{get;保护集;问:这种方法与创建继承自JsonNetSerializer的CustomJsonNetSerializer然后在ConfigureApplicationContainer(container.Register(typeof(JsonNetSerializer),typeof(CustomJsonNetSerializer))中注册有何不同?答:JsonSerializer是jancy.net用于Nancy的实现,并且这是我们在github上的自述文件中定义的推荐方法:https://github.com/NancyFx/Nancy.Serialization.JsonNet#customization你提到的类是对象的JSON序列化,另一个处理反序列化的类,都在内部使用JsonSerializer:https://github.com/NancyFx/Nancy.Serialization.JsonNet/blob/master/src/Nancy.Serialization.JsonNet/JsonNetSerializer.cs#L10使用它可以在使用JsonSerializer的任何地方使实现设置保持一致。问:我能否从您概述的方法中正确推断出我不再需要在CustomNancyBootstrapper的ConfigureApplicationContainer覆盖中显式注册CustomJsonSerializer?A:我做注册的方式只是注册依赖的更清晰的抽象,而不是做一个巨大的引导程序,你可以创建一些更小的特定类。是的,使用我的方法意味着您不需要注册bootstrap。以上就是C#学习教程:使用NancyTinyIoC配置JsonNetSerializer和JsonNetBodyDeserializer的全部内容分享。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
