2014-01-15 1 views
3

Есть несколько способов заменить DataContractResolver, если вы используете WCF, я хочу сделать то же самое с веб-Api. Только точка расширения, я нашел это:Как заменить DataContractResolver в стек Web Api?

GlobalConfiguration.Configuration.Formatters.XmlFormatter.SetSerializer<Person>(new DataContractSerializer(typeof(Person), null, Int32.MaxValue, false, false, null, new TypeNameVersioning())); 

Я ищу что-то в строке (псевдо-код):

GlobalConfiguration.Configuration.Formatters.XmlFormatter.SetDataContractResolver = new TypeNameVersioning(); 
+0

DataContractResolver может устанавливаться только в конструкторе DataContractSerializer, поэтому вам действительно нужно создать новый DataContractSerializer – LostInComputer

+0

Не совсем, вы также можете указать его в методах чтения/записи на DataContractSerializer. Но это не так, WCF предоставляет точки расширения. Я удивлен, что веб-api, похоже, не дает что-то подобное. – Marius

ответ

0

Если вы хотите использовать XmlSerializer затем

GlobalConfiguration.Configuration.Formatters.XmlFormatter.UseXmlSerializer = true 

Если это не отвечает вашим потребностям, то сделать

GlobalConfinguration.Configuration.Formatters.Clear(); 
GlobalConfinguration.Configuration.Formatters.Add(new YourOwnFormatterCanGoHere()); 

Просто еще один момент. Я использую веб-API все время и имею уже несколько лет, и я редко использую форматирование вообще. Я возвращаю HttpResponseMessage с производными версиями HttpContent. Не говоря о том, что вы должны сделать то же самое, просто говоря, что в веб-API есть много способов делать вещи. Форматы не требуются.

+0

Извините, но я не следую за вами. Фортатеры управляют сериализацией по типу контента? Если вы вернете HttpResponseMessage, кто-то все еще должен сериализовать содержимое в поток ответов? – Marius

+0

@Marius Нет, классы, которые происходят из HttpContent, выполняют сериализацию. Когда вы возвращаете CLR-тип из веб-api, он помещается в экземпляр 'ObjectContent', который затем использует formatters для его сериализации. Если вам не нужно сериализовывать произвольные типы CLR, вы можете просто вернуть производный HttpContent. –

+0

@Marius Если вы посмотрите на этот проект https://github.com/darrelmiller/ndc/tree/master/ConferenceWebApi/Controllers, вы можете увидеть, что я возвращаю содержимое 'Json-home', содержимое' collection + json' и 'hal' содержание. –

Смежные вопросы