Search code examples
c#asp.netservicestack-text

ServiceStack.Text set JsConfig on application start


I set JsConfig in Application_Start method in my asp net mvc application

 protected void Application_Start()
        {
            JsConfig.DateHandler = JsonDateHandler.ISO8601;
            JsConfig.EmitCamelCaseNames = true;
        }

and then I want to use extension method ToJson in my service method, for example

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

and then I look a result and I see that json result in PascalCase and date in following format Date(123455678990), but before I set in config for use the camelCase and utc format date

but I set config in my service method, for example:

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

I get the result that I want

Is it possible to set JsConfig properties on start my application?


Solution

  • Setting the JsConfig properties at Application_Start() in your Global.asax does set the global configuration for your JSON serialization preferences as expected.

    I've added an example of this in a test MVC Project in this commit which is working as expected, that sets static JsConfig configuration in Application_Start():

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

    And serializes JSON in a controller:

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

    Which serializes as expected:

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