Newtonsoft json Serialize Primitive类型WebApi

时间:2013-11-07 15:38:19

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

我有一个带有C#的Web API项目,我正在尝试配置Json Serializer(Newtonsoft JSON)以返回一个包装的响应,因为当我的api控制器只返回一个布尔或整数(或其他基本类型)时,我只是得到了对象,但我想要的东西是:

{ d : true } 

包装结果但没有修改控制器,我看到有很多配置内容:

config.Formatters.JsonFormatter.SerializerSettings

但我没有找到提供此行为的那个。

谢谢!

1 个答案:

答案 0 :(得分:0)

嗨,最后我解决了从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);
        }
    }