通常,在 Nancy 中解决此问题的方法是实现您自己的 JSON 序列化器,如下所示:
public sealed class CustomJsonSerializer : JsonSerializer
{
public CustomJsonSerializer()
{
ContractResolver = new CamelCasePropertyNamesContractResolver();
Converters.Add(new StringEnumConverter
{
AllowIntegerValues = false,
CamelCaseText = true
});
Formatting = Formatting.Indented;
}
}
在这里您可以覆盖所有设置。
然后你就可以注册它,我通过使用来做到这一点IRegistrations
public class JsonRegistration : IRegistrations
{
public IEnumerable<TypeRegistration> TypeRegistrations
{
get
{
yield return new TypeRegistration(typeof(JsonSerializer), typeof(CustomJsonSerializer));
}
}
public IEnumerable<CollectionTypeRegistration> CollectionTypeRegistrations { get; protected set; }
public IEnumerable<InstanceRegistration> InstanceRegistrations { get; protected set; }
}
Q: 这种方法与创建继承自 JsonNetSerializer 的 CustomJsonNetSerializer 然后将其注册到ConfigureApplicationContainer (container.Register( typeof(JsonNetSerializer), typeof(CustomJsonNetSerializer) ) 中有何不同?
A:JsonSerializer 是 Nancy 的 json.net 实现,这是我们在 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 的任何地方的实现设置保持一致。
Q: 我能否从您概述的方法中正确推断出我不再需要在 CustomNancyBootstrapper 的 ConfigureApplicationContainer 覆盖中显式注册 CustomJsonSerializer ?
A:我为注册所做的方法只是一种用于注册依赖项的更清晰的抽象,您可以创建一些较小的特定类,而不是制作一个巨大的引导程序。
是的,使用我的方法意味着您不需要在引导程序中注册。