更改ASP .NET MVC 4 WebAPI序列化(XML/JSON)的内部对象名称

fra*_*llo 3 rest json xml-serialization asp.net-mvc-4 asp.net-web-api

我正在使用新的Microsoft MVC 4 ApiController类和WebAPI构建RESTful Web服务.我有一个Person类:

public class Person
{
    public string surname { get; set; }
    public string name{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)

并且默认的HTTP GET方法有效,返回以下内容:

<Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <surname>John</surname>
    <name>Titor</name>
</Person>
Run Code Online (Sandbox Code Playgroud)

我现在需要一个注释集,它允许我更改默认的内部对象的名称,例如我想要更改surnamemsurname.我尝试添加以下内容:

[XmlElement("msurname")]
Run Code Online (Sandbox Code Playgroud)

注释,但只有Accept在我的请求的标题包含application/xml(当然)时才有效.我已经尝试并使用了[DataMember]注释,完全被忽略了.

是否有一个注释集我可以在WebAPI中使用这个ApiController来序列化为XML和JSON格式?谢谢.

编辑:更正,如果我使用[DataMember][DataContract]注释,我得到了JSON序列化所需的行为,但不是XML.如果我使用相反的事情[XmlElement].

Dar*_*ler 5

您在DataMember中看到的行为是因为默认情况下WebAPI使用XmlSerializer,而不是DataContractSerializer.但是,JSON目前默认使用JSONDataContractSerializer.但是将来它不会.您可以通过设置将XML更改为XmlDataContractSerializer

GlobalConfiguration.Config.Formatters.XmlDataContractSerializer = true;
Run Code Online (Sandbox Code Playgroud)

这样,JSON和XML格式都将使用DataContractSerializer.

  • 太好了谢谢!我在我的`Global.asax.cs Application_Start`中添加了以下行(与你建议的不同):`GlobalConfiguration.Configuration.Formatters.XmlFormatter.UseDataContractSerializer = true;` (2认同)