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