如何指定将由WebApi序列化的对象的名称?
我的web api正在返回一组与Domain对象不同的对象。例如,我的域名有一个Employee类,但我不想在我的api中公开Employee类的所有成员,所以我创建了另一个名为EmployeeApiModel的类。如何指定将由WebApi序列化的对象的名称?
现在我的WebApi正在返回一个EmployeeApiModel的列表,但我希望能够指定它应该序列化到的名称。这是代替<EmployeeApiModel>
标记在XML中,我想要<Employee>
但不改变被序列化的基础类是EmployeeApiModel的事实。
我该如何做到这一点?
从技术上讲,网络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
您可以使用各种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
这似乎不适用于Web Api。我添加了XmlRoot,但仍然获得与根相同的ApiModel。 – shashi 2012-08-09 15:28:35
你的API支持json和xml都是? – 2012-08-09 14:57:55
什么意思“我希望能够指定它应该序列化到的名称”? – 2012-08-09 15:00:13
是的,无论是Xml和Json ..其实这是由WebApi本身处理。但我应该能够指定适用于XML和Json的东西 – shashi 2012-08-09 15:01:44