控制Web API / APIController中的序列化

时间:2013-01-03 18:40:13

标签: asp.net serialization asp.net-web-api deserialization

在哪里可以在ASP.NET Web API中指定自定义序列化/反序列化?

我们的应用程序的吞吐量需要快速序列化/反序列化消息,因此我们需要严格控制这部分代码,以使用我们的家庭酿造或OSS那里。

我已经检查了各种来源,例如this,它解释了如何创建自定义值提供程序,但我还没有看到一个示例来解释端到端的进程。

有人可以指示/告诉我序列化传入/传出消息的方法吗?

此外,Web API中与this one for WCF类似的各种注入点/事件接收器图表表示赞赏!

1 个答案:

答案 0 :(得分:1)

这是上面答案中的案例链接的代码示例

public class MerlinStringMediaTypeFormatter : MediaTypeFormatter
{
    public MerlinStringMediaTypeFormatter()
    {
        SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/plain"));
    }

    public override bool CanReadType(Type type)
    {
        return type == typeof (YourObject); //can it deserialize
    }

    public override bool CanWriteType(Type type)
    {
        return type == typeof (YourObject); //can it serialize
    }

    public override Task<object> ReadFromStreamAsync( 
        Type type, 
        Stream readStream, 
        HttpContent content, 
        IFormatterLogger formatterLogger)
    {
        //Here you put deserialization mechanism
        return Task<object>.Factory.StartNew(() => content.ReadAsStringAsync().Result);
    }

    public override Task WriteToStreamAsync(Type type, object value, Stream writeStream, HttpContent content, TransportContext transportContext)
    {
        //Here you would put serialization mechanism
        return base.WriteToStreamAsync(type, value, writeStream, content, transportContext);
    }
}

然后您需要在Global.asax

中注册格式化程序
protected void Application_Start()
    {
        config.Formatters.Add(new MerlinStringMediaTypeFormatter());
    }

希望这可以节省你一些时间。