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

ここで本当に明らかな何かが欠けていますか?XML を逆シリアル化する独自の方法を ApiController に強制するにはどうすればよいですか?

4

0 に答える 0