Returning a string containing valid Json with Nancy

Solution 1:

Looks like Nancy has got a nice Response.AsJson extension method:

Get["/providers"] = _ =>
            {
                var providers = this.interactiveDiagnostics
                                    .AvailableDiagnostics
                                    .Select(p => new { p.Name, p.Description, Type = p.GetType().Name, p.GetType().Namespace, Assembly = p.GetType().Assembly.GetName().Name })
                                    .ToArray();

                return Response.AsJson(providers);
            };

Solution 2:

I like that you think there should be a better way because you're having to use 3 lines of code, I think that says something about Nancy :-)

I can't think of a "better" way to do it, you can either do it the GetBytes way:

Get["/"] = _ =>
    {
        var jsonBytes = Encoding.UTF8.GetBytes(myJsonString);
        return new Response
            {
                ContentType = "application/json",
                Contents = s => s.Write(jsonBytes, 0, jsonBytes.Length)
            };
    };

Or the "cast a string" way:

Get["/"] = _ =>
    {
        var response = (Response)myJsonString;

        response.ContentType = "application/json";

        return response;
    };

Both do the same thing - the latter is less code, the former more descriptive (imo).

Solution 3:

This also works:

Response.AsText(myJsonString, "application/json");