Проблема:Удалить все Namespaces с помощью DataContractSerializer без атрибутов или XmlSerializer
Я создал WebAPI и нужно поддерживать XML.
по умолчанию DataContractSerializer создает пространство имен, как:
xmlns:d2p1="http://schemas.datacontract.org/2004/07/Vendor.App.Model.DeeperModel"
xmlns:d2p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays"
Я не хочу, чтобы эти пространства имен в моем XML. С ним очень сложно работать с ними.
В моем случае мне нужно поддерживать XLST от FileMaker, у которого проблемы с пространствами имен, отсутствующие в других XLS-анализаторах.
То, что я нашел, но это не является дубликатом для более поздних причин statet:
Я прочитал об этом here, here и других местах в Интернете.
Я только нашел это два советы:
- Используйте
[DataContract(Namespace = "")]
атрибута по
- Используйте XmlSerializer
- путем расширения
XmlMediaTypeFormatter
- установкой
config.Formatters.XmlFormatter.UseXmlSerializer = true
- путем расширения
DataContract:
DataContract Атрибут не работает хорошо для классов У меня нет никакого контроля. Я не хочу, чтобы сделать этот уродливый хак:
[DataContract(Namespace = "")]
IThisIsNonesense<T> : IEnumerable<T>
{
}
[DataContract(Namespace = "")]
ThisIsNonesense<T> : List<T>, IThisIsNonesense<T>
{
public ThisIsNonesense() : base() {}
}
XmlSerializer:
XmlSerializer не очень гибкий. Например, он не поддерживает интерфейс. Я делаю, например, тяжелое использование IEnumerable<T>
.
Мой вопрос:
Как можно удалить все пространства имен по умолчанию, без внесения изменений через всю кодовую? Если не возможно, что бы вы посоветовали?
Я обычно просто разбираю файлы, используя XDocument. – jdweng
Хотя это сработало бы, для меня это было бы большим спросом. Я не хочу потерять преимущества сериализации. Также мои api-методы должны быть доступны через JSON и любой другой формат, который появится в будущем. @jdweng –