Asp.net mvc 4 WebAPI-如何让XML在响应内容中输出荣誉名称空间?

Asp.net mvc 4 WebAPI-如何让XML在响应内容中输出荣誉名称空间?,asp.net-mvc-4,serialization,asp.net-web-api,xml-serialization,Asp.net Mvc 4,Serialization,Asp.net Web Api,Xml Serialization,我正在使用ASP.NET MVC 4.0中的WebAPI构建一个API。我已经基于业务分析师提供的示例XML构建了模型类,使用了新的超级智能粘贴XML作为类功能 问题是,当我的客户机接受application/xml时,序列化的响应看起来不像原始的xml 我已经使用XMLSerializer手动反序列化和序列化了一些XML(往返),尽管它更好,更接近原始,但它仍然缺少一些名称空间前缀 如何确保输出完全符合规范?首先,您需要确保WebAPI使用XmlSerializer格式化您的WebAPI响应,

我正在使用ASP.NET MVC 4.0中的WebAPI构建一个API。我已经基于业务分析师提供的示例XML构建了模型类,使用了新的超级智能粘贴XML作为类功能

问题是,当我的客户机接受application/xml时,序列化的响应看起来不像原始的xml

我已经使用XMLSerializer手动反序列化和序列化了一些XML(往返),尽管它更好,更接近原始,但它仍然缺少一些名称空间前缀


如何确保输出完全符合规范?

首先,您需要确保WebAPI使用XmlSerializer格式化您的WebAPI响应,或者至少仅针对此资源/API使用XmlSerializer

WebApiConfig.cs
文件中,您可以找到路线注册资料以及一些注释掉的代码

在该块下添加以下内容:

var xmlSerializer = new XmlSerializer(typeof(FruitXmlModel));
config.Formatters.XmlFormatter.SetSerializer<FruitXmlModel>(xmlSerializer);
如果您使用了“将XML粘贴为类”功能,那么应该已经使用正确的属性
XmlTypeAttribute
和正确的命名空间集对该类进行了注释

如果一切顺利,这个简单的更改将为WebAPI和XmlSerializer提供生成正确前缀的XML输出所需的一切

我祝你好运,卢克,希望很快再见面

...

[XmlNamespaceDeclarations]
public XmlSerializerNamespaces Namespaces = new XmlSerializerNamespaces();

public FruitXmlModel() // ctor for one of my models
{
    this.Namespaces.Add("banana", "http://www.fruitschema.org/banana");
}

...