为什么ServiceStack.Text自定义反序列化设置不起作用?

5

我使用 ServiceStack(一个 web 服务框架)和 ServiceStack.Text。

我试图在 AppHost.Configure() 中为特定类型添加自定义序列化路由,但是这些设置未被应用/被忽略了。

public AppHost : AppHostBase 
{
    ...

    public override void Configure(Container container)
    {
        //Register custom serialization routine
        ServiceStack.Text.JsConfig<CultureInfo>.SerializeFn = r => r.TwoLetterISOLanguageName;
        ServiceStack.Text.JsConfig<CultureInfo>.DeSerializeFn = r => return new CultureInfo(r);    
    }
}
1个回答

7

ServiceStack.Text非常重视内部缓存以实现快速性能。在调用AppHost.Configure()之前,ServiceStack已经开始了缓存创建过程。

因此,为了解决这个问题,您需要在调用AppHost.Init()之前注册您的设置。

当然,并不是所有的ServiceStack.Text设置都需要遵循这个步骤 - 只有那些在调用AppHost.Configure()之前将被缓存的设置需要这样做。


请问您能否提供第一段信息的来源?我在使用ServiceStack.Text缓存时遇到类似的问题,但是您提出的解决方案在我的情况下不可行。 - ygormutti
1
谢谢...我一直在拼命地想弄清楚为什么它没有调用我的自定义反序列化器...把设置JsConfig<DateTime>.DeSerializeFn的那行代码移到AppHost构造函数中而不是.Configure()中,问题就解决了。 - Matt Welch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接