【问题标题】:Serialize anonymous type with literal JSON properties使用文字 JSON 属性序列化匿名类型
【发布时间】:2017-10-01 16:59:59
【问题描述】:

我怎样才能轻松地返回混合了普通对象和文字 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。有没有其他方法可以实现相同的目标?

【问题讨论】:

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


【解决方案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

【讨论】:

  • 我知道必须有另一种方式。当 JRaw 已经存在时,为什么要创建我自己的 RawJson 类?感谢您的信息。我确实使用 Json.Net,但试图坚持使用纯 MVC 只是为了避免污染可能的答案——但无论如何我都很高兴使用 Newtonsoft 产品。
猜你喜欢
  • 1970-01-01
  • 2017-01-17
  • 2012-08-05
  • 2020-04-06
  • 1970-01-01
  • 2010-09-24
  • 1970-01-01
  • 2021-08-28
  • 1970-01-01
相关资源
最近更新 更多