我有一个带有 C# 的 Web API 项目,我正在尝试将 Json 序列化程序(Newtonsoft JSON)配置为始终返回一个包装的响应,因为当我的 api 控制器只返回一个布尔值或整数(或其他原始类型)时,我只是得到对象,但我想要类似的东西:
{ d : true }
一个包装的结果,但没有修改控制器,我看到有很多配置的东西:
config.Formatters.JsonFormatter.SerializerSettings
但我没有找到提供这种行为的那个。
谢谢!
我有一个带有 C# 的 Web API 项目,我正在尝试将 Json 序列化程序(Newtonsoft JSON)配置为始终返回一个包装的响应,因为当我的 api 控制器只返回一个布尔值或整数(或其他原始类型)时,我只是得到对象,但我想要类似的东西:
{ d : true }
一个包装的结果,但没有修改控制器,我看到有很多配置的东西:
config.Formatters.JsonFormatter.SerializerSettings
但我没有找到提供这种行为的那个。
谢谢!
嗨,最后我解决了创建自己的继承自 JsonMediaTypeFormatter 的 Formatter,如下所示:
config.Formatters.Add(new WrappedJsonMediaTypeFormatter());
public class WrappedJsonMediaTypeFormatter : JsonMediaTypeFormatter
{
public WrappedJsonMediaTypeFormatter()
{
base.SerializerSettings.Culture = new System.Globalization.CultureInfo("en-GB");
base.SerializerSettings.DateFormatString = "dd/MM/yyyy";
}
public override System.Threading.Tasks.Task WriteToStreamAsync(System.Type type, object value, System.IO.Stream writeStream, System.Net.Http.HttpContent content, System.Net.TransportContext transportContext)
{
var obj = value;
if (type.IsPrimitive || Object.ReferenceEquals(type, typeof(string)))
obj = new { data = value };
if (Object.ReferenceEquals(value, null))
obj = new { };
return base.WriteToStreamAsync(type, obj, writeStream, content, transportContext);
}
}