使用文字JSON属性

时间:2017-05-03 18:10:19

标签: c# json serialization asp.net-mvc-5

如何轻松返回混合了普通对象和应该在JSON流中内联发送的文字JSON字符串的响应,完全没有解释或编码?

public JsonResult Something() {
   var literalJson = "{\"a\":1,\"b\":2}";
   return Json(new {
      result = "success",
      responseTime = DateTimeOffset.Now(),
      data = literalJson // only, don't JSON-encode this, emit it as-is
   });
}

创建LiteralJson类可以使用自定义Converter。但我不确定这是最有意义的。

如果这是一个可靠的实现,我知道如何制作自定义Converter。还有其他方法可以达到同样的目标吗?

1 个答案:

答案 0 :(得分:1)

如果您安装了Json.Net,则可以使用JRaw

public ContentResult Something()
{
    var literalJson = "{\"a\":1,\"b\":2}";

    var resp = new
    {
        result = "success",
        responseTime = DateTimeOffset.Now,
        data = new Newtonsoft.Json.Linq.JRaw(literalJson)
    };

    return Content(JsonConvert.SerializeObject(resp), "application/json", Encoding.UTF8);
}

但请注意,您需要使用Json.Net的序列化程序才能工作。这就是为什么我将上面的代码更改为使用JsonConvert.SerializeObject并返回ContentResult而不是使用您最初显示的控制器Json方法。 Json方法在内部使用JavaScriptSerializer,但不知道如何处理JRaw