ServiceStack.Text在应用程序启动时设置JsConfig

时间:2016-06-29 15:34:13

标签: c# asp.net servicestack-text

我在我的asp net mvc应用程序

中的Application_Start方法中设置了JsConfig
 protected void Application_Start()
        {
            JsConfig.DateHandler = JsonDateHandler.ISO8601;
            JsConfig.EmitCamelCaseNames = true;
        }

然后我想在我的服务方法中使用扩展方法ToJson,例如

public string testMethod{
    //here code
    var obj = new TestObj{
        Id = 1,
        CurrentDate = DateTime.Now
    }
    return obj.ToJson();
}

然后我查看结果,我看到json导致PascalCase和日期格式为Date(123455678990),但在我在config中设置使用camelCase和utc格式日期

但我在我的服务方法中设置了配置,例如:

public string testMethod{
    //here code
JsConfig.DateHandler = JsonDateHandler.ISO8601;
            JsConfig.EmitCamelCaseNames = true;
    var obj = new TestObj{
        Id = 1,
        CurrentDate = DateTime.Now
    }
    return obj.ToJson();
}

我得到了我想要的结果

是否可以在启动我的应用程序时设置JsConfig属性?

1 个答案:

答案 0 :(得分:3)

在Global.asax中设置Application_Start()处的JsConfig属性会按预期为JSON序列化首选项设置全局配置。

我在测试MVC项目in this commit中添加了一个示例,它正在按预期工作,在Application_Start()中设置静态JsConfig配置:

public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        JsConfig.Init(new Config {
            DateHandler = DateHandler.ISO8601,
            TextCase = TextCase.CamelCase
        });
        //...
    }
}

在控制器中序列化JSON:

return new HomeViewModel
{
    Name = name,
    Json = new TestObj { Id = 1, CurrentDate = DateTime.Now }.ToJson()
};

按预期序列化:

{"id":1,"currentDate":"2016-06-29T11:56:45.7517089-04:00"}