2012-08-09 38 views
0

我的web api正在返回一组与Domain对象不同的对象。例如,我的域名有一个Employee类,但我不想在我的api中公开Employee类的所有成员,所以我创建了另一个名为EmployeeApiModel的类。如何指定将由WebApi序列化的对象的名称?

现在我的WebApi正在返回一个EmployeeApiModel的列表,但我希望能够指定它应该序列化到的名称。这是代替<EmployeeApiModel>标记在XML中,我想要<Employee>但不改变被序列化的基础类是EmployeeApiModel的事实。

我该如何做到这一点?

+0

你的API支持json和xml都是? – 2012-08-09 14:57:55

+0

什么意思“我希望能够指定它应该序列化到的名称”? – 2012-08-09 15:00:13

+0

是的,无论是Xml和Json ..其实这是由WebApi本身处理。但我应该能够指定适用于XML和Json的东西 – shashi 2012-08-09 15:01:44

回答

2

从技术上讲,网络API同时支持基于内容协商机制JSON和XML,JSON是默认的格式,如果你想接收XML,只是把标题:

接受:应用/ XML

要了解更多的内容协商,访问this

由于您希望您的API同时支持JSON和XML,你应该使用DataContract和DataMember属性进行序列化的模型:EmployeeApiModel,是这样的:

[DataContract(Name = "Employee")] 
public class EmployeeApiModel 
{ 
    [DataMember(Name = "Name2")] 
    public string Name { get; set; } 

    [DataMember] 
    public string Email { get; set; } 
} 

查看更多关于这个blog-post

0

您可以使用各种Attribute标签来控制序列化XML的输出。

[XmlRoot("Employee")] 
Public class EmployeeApiModel 
{ 
    [XmlElement("fname")] 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public int age { get; set; } 
} 

这将产生XML,如:

<Employee> 
    <fname>John</fname> 
    <LastName >Smith</LastName > 
    <age>24</age> 
</RootElementsName> 

您可以在此处详细了解各种XML修饰符:http://msdn.microsoft.com/en-us/library/e123c76w

如果您希望使用现有的JSON XML改性剂,看看这篇文章:Serialize .Net object to json, controlled using xml attributes

+3

这似乎不适用于Web Api。我添加了XmlRoot,但仍然获得与根相同的ApiModel。 – shashi 2012-08-09 15:28:35

相关问题