在哪里可以在 ASP.NET Web API 中指定自定义序列化/反序列化?
我们应用程序的吞吐量需要消息的快速序列化/反序列化,因此我们需要严格控制这部分代码,以使用我们的自制软件或 OSS。
我已经检查了各种来源,例如解释如何创建自定义值提供者的各种来源,但我还没有看到一个解释端到端过程的示例。
任何人都可以指导/向我展示序列化传入/传出消息的方式吗?
还感谢 Web API 中类似于WCF的各种注入点/事件接收器的图表!
您正在寻找的扩展点是 MediaTypeFormatter。它控制从请求正文读取和写入响应正文。这可能是编写自己的格式化程序的最佳资源:
http://www.asp.net/web-api/overview/formats-and-model-binding/media-formatters
这是上面答案中的链接失效的代码示例
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());
}
希望这可以节省您一些时间。