Dyl*_*tie 2 serialization poco asp.net-web-api
WebAPI忽略传入请求上的Accept:标头,并且似乎始终将我的POCO对象序列化为JSON.我正在使用WizTools RestClient来测试API调用,并设置请求HTTP标头:
GET /api/people/evh123
Accept: application/xml
Run Code Online (Sandbox Code Playgroud)
如果我修改我的控制器以返回string[]或其他一些本机类型,我会按预期获得XML.我见过几个人建议在我的Application_Start()方法中添加这一行:
GlobalConfiguration.Configuration.Formatters.XmlFormatter.UseXmlSerializer = true;
Run Code Online (Sandbox Code Playgroud)
但就我而言,这没有任何区别.
我的API控制器:
using System.Web.Http;
using Spyglass.Api.Entities;
namespace Spyglass.Api.Controllers {
public class PeopleController : ApiController {
public Person Get(string personId) {
var member = new Person(personId) { FullName = "Eddie van Halen" };
return (member);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的路线配置:
using System.Web.Http;
namespace Spyglass.Api {
public static class WebApiConfig {
public static void Register(HttpConfiguration config) {
config.Routes.MapHttpRoute(
name: "PeopleApi",
routeTemplate: "api/people/{personId}/{controller}/{id}",
defaults: new {id = RouteParameter.Optional, controller = "People"}
);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的POCO:
namespace Spyglass.Api.Entities {
public class Person {
public string PersonId { get; set; }
public string FullName { get; set; }
public Person(string personId) {
this.PersonId = personId;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我错过了我的POCO的某种自定义序列化配置吗?没有任何循环引用或复杂类型通常会导致XML序列化程序头痛...任何想法?
您需要使用[DataContract]和[DataMember]属性来装饰对象
[DataContract]
public class Person
{
[DataMember]
public string PersonId { get; set; }
[DataMember]
public string FullName { get; set; }
public Person(string id)
{
PersonId = id;
}
}
Run Code Online (Sandbox Code Playgroud)
或者,确保您的POCO具有默认的无参数构造函数.这是DataContractSerializer的限制.您也可以使用其他序列化程序.
| 归档时间: |
|
| 查看次数: |
998 次 |
| 最近记录: |