使用文字 JSON 属性序列化匿名类型

Eri*_*ikE 5 c# serialization json 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
   });
}
Run Code Online (Sandbox Code Playgroud)

创建一个LiteralJson类可以工作,并Converter为其定制。但我不确定这是否最有意义。

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

Bri*_*ers 3

如果您安装了 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);
}
Run Code Online (Sandbox Code Playgroud)

但请注意,您需要使用 Json.Net 的序列化器才能实现此目的。这就是为什么我将上面的代码更改为使用JsonConvert.SerializeObject并返回 aContentResult而不是像您最初所示的那样使用控制器的Json方法。该Json方法在内部使用JavaScriptSerializer,它不知道如何处理JRaw.