2

我有一个模型类,我试图从 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 中):

  1. GlobalConfiguration.Configuration.Formatters.XmlFormatter.SetSerializer<Asset>(new XmlSerializer(typeof(Asset)));
  2. GlobalConfiguration.Configuration.Formatters.Insert(0, new XmlFormatter());
  3. ModelBinderProviders.BinderProviders.Add(new XmlModelBinderProvider());

... whereXmlFormatter和是用于反序列化请求正文XmlModelBindingProvider的自定义实现。XmlSerializer

我在这里错过了一些非常明显的东西吗?如何强制 ApiController 让我指定我自己的反序列化 XML 的方式?

4

0 回答 0