【问题标题】:WebAPI - How do I get XML to output honour namespaces in the response content?WebAPI - 如何让 XML 在响应内容中输出荣誉命名空间?
【发布时间】:2013-08-10 18:16:55
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: asp.net-mvc-4 serialization asp.net-web-api xml-serialization


    【解决方案1】:

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

    WebApiConfig.cs 文件中,您会找到路由注册内容以及一些注释掉的代码。

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

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

    这将指定在序列化 FruitXmlModel CLR 类型时使用旧的 XmlSerializer。请注意,您可能需要引用 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 输出所需的一切。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-13
      • 1970-01-01
      • 2012-03-10
      • 1970-01-01
      • 1970-01-01
      • 2022-11-21
      • 1970-01-01
      • 2012-03-29
      相关资源
      最近更新 更多