我有一个模型类,我试图从 XML 反序列化。该类用 C# 属性装饰:
public class Model
{
[XmlAttribute("id")]
public int id { get; set; }
public DateTime time_log { get; set; }
}
我有一个带动作的 ApiController:
public void Post(Model m)
{
// m.time_log has correct value.
// m.id always gets default value of 0.
}
并提供以下输入:
<?xml version="1.0"?>
<asset id="100">
<time_log>30 July 2012</time_log>
</asset>
发生的事情(在Post()
动作内部)m.time_log
是绑定到正确的DateTime
值,但id
获得其默认值 0。
似乎 MVC API 平台不使用 XmlSerializer 来绑定m
参数...,所以它不会以我期望的方式反序列化,这很好,但我似乎无法找到一种方法来告诉它这样做。
到目前为止,我已经尝试过(在 Global.asax.cs#Application_Start 中):
GlobalConfiguration.Configuration.Formatters.XmlFormatter.SetSerializer<Asset>(new XmlSerializer(typeof(Asset)));
GlobalConfiguration.Configuration.Formatters.Insert(0, new XmlFormatter());
ModelBinderProviders.BinderProviders.Add(new XmlModelBinderProvider());
... whereXmlFormatter
和是用于反序列化请求正文XmlModelBindingProvider
的自定义实现。XmlSerializer
我在这里错过了一些非常明显的东西吗?如何强制 ApiController 让我指定我自己的反序列化 XML 的方式?