我的web api返回一组与Domain对象不同的对象。例如,我的域名有一个Employee类,但我不想在api中公开Employee类的所有成员,所以我创建了另一个名为EmployeeApiModel的类。
现在我的WebApi正在返回一个EmployeeApiModel列表,但我希望能够指定它应该序列化到的名称。这不是xml中的<EmployeeApiModel>
标记,我想获得<Employee>
但不改变被序列化的基础类是EmployeeApiModel这一事实。
我怎样才能做到这一点?
答案 0 :(得分:3)
从技术上讲,Web Api支持基于内容协商机制的json和xml,Json是默认格式,如果你想接收xml,只需加上标题:
接受:application / 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
答案 1 :(得分:0)
您可以使用各种属性标记来控制序列化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