我有一个运行katana的asp.net webapi v2,并使用XmlSerializer和一个非常简单的自定义序列化实现:
config.Formatters.XmlFormatter.UseXmlSerializer = true;
config.Formatters.XmlFormatter.SetSerializer<SalesOrder>(new XmlSerializer<SalesOrder>());
XmlSerializer只是System.Runtime.Serialization.XmlObjectSerializer抽象类的简单实现
在调用这样的帖子时:
public HttpResponseMessage Post([FromBody]SalesOrder value)
{
return value == null || value.SignZoneCustomerNumber.IsNullOrEmpty()
? Request.CreateResponse(HttpStatusCode.BadRequest)
: Request.CreateResponse(HttpStatusCode.Accepted, _service.CreateOrder(value, Request.GetCorrelationId()));
}
当xml包含类似
的声明时,该值为null<?xml version="1.0" encoding="ISO-8859-15"?>
删除声明并将其发送到desearilizes罚款。
知道为什么声明导致deseriazation失败?
模型的定义如下:
[XmlRoot("Order")]
[Serializable]
public class SalesOrder : BaseOrder<SalesOrderLineItem>
{
public string PoNumber { get; set; }
public DateTime? PoDate { get; set; }
...more properties...
}
由于
更新
原来是导致问题的编码 这个标题有效:
<?xml version="1.0" encoding="UTF-8"?>
其他值如UTF-16和ISO-8859-1失败 知道为什么吗?