IHttpActionResult with JSON string

You can create your own IHttpActionResult class instance to return the JSON and a method in your controller or base controller class to utilize it.

Create the IHttpActionResult instance that sets the content and status code:

public class JsonTextActionResult : IHttpActionResult
{
    public HttpRequestMessage Request { get; }

    public string JsonText { get; }

    public JsonTextActionResult(HttpRequestMessage request, string jsonText)
    {
        Request = request;
        JsonText = jsonText;
    }

    public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
    {
        return Task.FromResult(Execute());
    }

    public HttpResponseMessage Execute()
    {
        var response = this.Request.CreateResponse(HttpStatusCode.OK);
        response.Content = new StringContent(JsonText, Encoding.UTF8, "application/json");

        return response;
    }
}

Add a method to your controller to create the result. Here is a Web API example:

public class MyApiController : ApiController
{
    protected internal virtual JsonTextActionResult JsonText(string jsonText)
    {
        return new JsonTextActionResult(Request, jsonText);
    }

    [HttpGet]
    public IHttpActionResult GetJson()
    {
        string json = GetSomeJsonText();
        return JsonText(json);
    }
}

Another recommendation is as below;

var json = JToken.FromObject(yourObject);
return Ok(json);

I've got the same problem and this piece of code worked for me (Using Newtonsoft.Json nuget package to deserialize the json):

var unserializedContent = JsonConvert.DeserializeObject(json);
return Json(unserializedContent);

It seems we must have an object in order to Json() work as it should.

Tags:

C#

Json

Json.Net