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

时间:2013-08-08 21:06:59

标签: 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(往返),虽然它更好,更接近原始版本,但它仍然缺少一些名称空间前缀。

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

1 个答案:

答案 0 :(得分:2)

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

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

在该块下添加,添加以下内容:

var xmlSerializer = new XmlSerializer(typeof(FruitXmlModel));
config.Formatters.XmlFormatter.SetSerializer<FruitXmlModel>(xmlSerializer);

这将指定序列化XmlSerializer CLR类型时使用的旧FruitXmlModel。请注意,您可能需要引用XML序列化程序集。

接下来,您需要将此代码添加到模型中的类中,该类表示XML中开始新命名空间的元素。

...

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

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

...

如果您已使用“将XML作为类”功能,则此类应已使用正确的属性XmlTypeAttribute进行注释,并使用正确的命名空间集。

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

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