Dave Dave - 1 year ago 70
JSON Question

Returning a string containing valid Json with Nancy

I receive a string that contains valid JSON from another service.
I would like to just forward this string with Nancy but also set the content-type to "application/json" which will allow me to remove the need for using $.parseJSON(data) on the client side.

If I use Response.AsJson it seems to mangle the JSON in the string and adds escape characters.
I could create a Stream with the string and set the response type something like:

Response test = new Response();
test.ContentType = "application/json";
test.Contents = new MemoryStream(Encoding.UTF8.GetBytes(myJsonString));

but would like to know if there is a simpler way?

Answer Source

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).