首页 > 解决方案 > ASP.NET Web API 和 XML 序列化

问题描述

我正在开发一个 Web API,我有一个如下模型:

   public class Customer
    {
        [XmlElement]
        public string Name { get; set; }
        [XmlElement]
        public decimal Age { get; set; }
    }

我的控制器是:

    public class CustomerController : ApiController
    {

        public Customer Get()
        {
            return new Customer {Name="Mike",Age=22.0M };
        }

    }
}

当我设置 accept:application/xml 我的结果是:

<?xml version="1.0" encoding="utf-8"?>
<Customer xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <Name>Mike</Name>
    <Age>22.0</Age>
</Customer>

当我为客户开发它时,我需要我的 xml 是:

<?xml version="1.0" encoding="utf-8"?>
<cu:Customer xmlns:cu="http://www.mywebsite.com/test">
    <Name>Mike</Name>
    <Age>22.0</Age>
</cu:Customer>

如果我创建一个XmlSerializer并手动调用Serialize函数然后将结果作为字符串返回,我可以做到这一点,但我需要该函数将 Customer 作为返回值返回。

标签: c#asp.netasp.net-mvcasp.net-web-apixmlserializer

解决方案


尝试以下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Serialization;


namespace ConsoleApplication128
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces();
            namespaces.Add("cu", "http://www.mywebsite.com/test");

            XmlWriterSettings settings = new XmlWriterSettings();
            settings.Indent = true;

            XmlWriter writer = XmlWriter.Create(FILENAME, settings);
            XmlSerializer serializer = new XmlSerializer(typeof(Customer));

            CustomerController controller = new CustomerController();

            serializer.Serialize(writer, controller.Get(), namespaces);
        }
    }
    public class ApiController
    {
    }
    public class CustomerController : ApiController
    {

        public Customer Get()
        {
            return new Customer { Name = "Mike", Age = 22.0M };
        }

    }
    [XmlRoot(ElementName = "Customer", Namespace = "http://www.mywebsite.com/test")]
    public class Customer
    {
        [XmlElement(Namespace = "")]
        public string Name { get; set; }
        [XmlElement(Namespace = "")]
        public decimal Age { get; set; }
    }

}

推荐阅读