【问题标题】:How return json object instead of string in json.net?如何在 json.net 中返回 json 对象而不是字符串?
【发布时间】:2017-04-24 09:24:54
【问题描述】:

我想实现自定义 json.net 序列化方法(空值处理、自定义 ContractResolver 等),但是当我尝试使用 JsonConvert.SerializeObject() 时,我总是在输出中得到字符串而不是格式化json 对象。 这是我的代码:

public class Card
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }

    public class TestController : ApiController
    {
        [HttpGet]
        [Route("api/Test")]
        public IHttpActionResult Test()
        {
            var test = new Card()
            {
                Id = 2,
                Name = "test card"
            };

            JsonSerializerSettings settings = new JsonSerializerSettings
            {
                NullValueHandling = NullValueHandling.Ignore,
                Formatting = Formatting.Indented
            };
            var result = JsonConvert.SerializeObject(test, settings);

            return Ok(result);
        }
    }

返回 "{\r\n \"Id\": 2,\r\n \"Name\": \"test card\"\r\n}"

当我在 api 控制器中返回对象 (return Ok(test);) 时,我会得到正确格式的 json

{
  "Id": 2,
  "Name": "test card"
}

如何在 api 控制器中通过序列化的自定义实现返回 json 对象?

【问题讨论】:

  • return Json(test)?
  • @UweKeim 我不能这样做,因为我想将自定义 ContractResolver 添加到 json Serialize 方法
  • 大概是Visual Studio的格式。通过将其打印到文件或控制台来测试它。 @UweKeim 再次阅读了这个问题。那不是他的问题。
  • @Mafii 我用 Postman 应用测试过
  • @mkul 查看 Ok()。我不知道它到底做了什么,但它转义了字符串。你有OK函数的源码吗?

标签: c# asp.net asp.net-web-api json.net


【解决方案1】:

这是配置问题。要将自定义序列化程序选项附加到全局 Web api 配置,只需更改 WebApiConfig 如下:

config.Formatters.JsonFormatter.S‌​erializerSettings = new JsonSerializerSettings
            {
                NullValueHandling = NullValueHandling.Ignore,
                Formatting = Formatting.Indented
            };

并将对象传递给返回行 - 序列化将自动完成

【讨论】:

    猜你喜欢
    • 2012-11-26
    • 1970-01-01
    • 2021-11-03
    • 1970-01-01
    • 2018-09-15
    • 1970-01-01
    • 2017-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多