ASP.NET Web API Controller Specific Serializer
asp.net, asp.net-web-api, xml, xml-serialization
Solution
You were very much on the right track. But you need to initallise a new instance of the `XmlMediaTypeFormatter` in your config attributes otherwise you will affect the global reference.
As you know, you need to create 2 attributes based on the `IControllerConfiguration` interface.
public class Controller1ConfigAttribute : Attribute, IControllerConfiguration
{
public void Initialize(HttpControllerSettings controllerSettings,
HttpControllerDescriptor controllerDescriptor)
{
var xmlFormater = new XmlMediaTypeFormatter {UseXmlSerializer = true};
controllerSettings.Formatters.Clear();
controllerSettings.Formatters.Add(xmlFormater);
}
}
public class Controller2ConfigAttribute : Attribute, IControllerConfiguration
{
public void Initialize(HttpControllerSettings controllerSettings,
HttpControllerDescriptor controllerDescriptor)
{
var xmlFormater = new XmlMediaTypeFormatter();
controllerSettings.Formatters.Clear();
controllerSettings.Formatters.Add(xmlFormater);
}
}
Then decorate your controllers with the relevant attribute
[Controller1ConfigAttribute]
public class Controller1Controller : ApiController
{
[Controller2ConfigAttribute]
public class Controller2Controller : ApiController
{
Problem
I've a self host Web API with 2 controllers: - For controller 1, I need default DataContractSerializer (I'm exposing EF 5 POCO) - For controller 2, I need XmlFormatter with parameter UseXmlSerializer set to true (I'm exposing an XmlDocument) I've tried to set formatters during controller initialization, but the configuration seems to be global, affecting all controllers: ``` public class CustomConfigAttribute : Attribute, IControllerConfiguration { public void Initialize(HttpControllerSettings settings, HttpControllerDescriptor descriptor) { settings.Formatters.XmlFormatter.UseXmlSerializer = true; } } ``` How can I solve this?