我想用来DataContractSerializer
序列化响应和XmlSerializer
反序列化传入请求中的 xml。可能吗?我知道我可以为不同的类型使用不同的序列化程序,但我想要不同的序列化程序进行读写。
问问题
370 次
1 回答
3
这似乎是一个非常奇怪的要求,但是是的,这是可能的。您可以像这样创建自定义 MediaType 格式化程序:
public class DcsXsFormatter : MediaTypeFormatter
{
public DataContractXmlFormatter()
{
SupportedMediaTypes.Add(new System.Net.Http.Headers.MediaTypeHeaderValue("application/xml"));
SupportedMediaTypes.Add(new System.Net.Http.Headers.MediaTypeHeaderValue("text/xml"));
}
public override bool CanWriteType(Type type)
{
return true;
}
public override bool CanReadType(Type type)
{
return true;
}
public override Task<object> ReadFromStreamAsync(Type type, Stream readStream,
HttpContent content,
IFormatterLogger formatterLogger)
{
var task = Task<object>.Factory.StartNew(() =>
{
var ser = new XmlSerializer(type);
return ser.Deserialize(readStream);
});
return task;
}
public override Task WriteToStreamAsync(Type type, object value,
Stream writeStream,
HttpContent content,
TransportContext transportContext)
{
var task = Task.Factory.StartNew( () =>
{
var ser = new DataContractSerializer(type);
ser.WriteObject(writeStream,value);
writeStream.Flush();
});
return task;
}
}
在 global.asax 中连接它:
// 移除现有的 XmlFormatter config.Formatters.Remove(config.Formatters.XmlFormatter);
// Hook in your custom XmlFormatter
config.Formatters.Insert(0, new DcsXsFormatter());
但是你为什么要这样做呢?
于 2012-09-20T09:33:20.700 回答