Asp.net web api 当属性从字典继承时,WebApi modelBinding失败<;字符串,字符串>;

Asp.net web api 当属性从字典继承时,WebApi modelBinding失败<;字符串,字符串>;,asp.net-web-api,model-binding,Asp.net Web Api,Model Binding,当viewmodel中的属性继承自字典时,WebApi模型绑定失败。当属性的数据类型更改为justDictionary时,相同的模型绑定工作 下面是绑定不起作用的示例 当我将网页数据提交给ApiController时,绑定将不会绑定MyDictionaryExtraData属性。如果我将属性更改为字典ExtraData属性,则Api控制器将正确绑定。但是,这不是一个选项,因为MyDictionary类具有我需要的其他功能 我有一个从Dictionary继承的类,看起来像下面的一个: public

当viewmodel中的属性继承自
字典时,WebApi模型绑定失败。当属性的数据类型更改为just
Dictionary
时,相同的模型绑定工作

下面是绑定不起作用的示例

当我将网页数据提交给ApiController时,绑定将不会绑定
MyDictionary
ExtraData属性。如果我将属性更改为
字典
ExtraData属性,则Api控制器将正确绑定。但是,这不是一个选项,因为MyDictionary类具有我需要的其他功能

我有一个从Dictionary
继承的类,看起来像下面的一个:

public class MyDictionary<TKey, TVal> : Dictionary<TKey, TVal>
{
}
html表单片段如下所示:

    <ul>
    <li>
        <input type="text" name="ExtraData[0].Key" value="Key1"/>
        <input type="text" name="ExtraData[0].Value" value="Value1"/>
    </li>
    <li>
        <input type="text" name="ExtraData[1].Key" value="Key2"/>
        <input type="text" name="ExtraData[1].Value" value="Value2"/>
    </li>
    <li>
        <input type="text" name="ExtraData[2].Key" value="Key3"/>
        <input type="text" name="ExtraData[2].Value" value="Value3"/>
    </li>
</ul>

我相信,如果你按照以下方式“装饰”你的自定义词典,你也许可以做你想做的事情。不确定您需要执行什么
DataContract
特定配置,但这应该是一个开始。否则,将额外功能封装为通用字典类的扩展方法可能会更容易。如果注释掉初始化字典的
HomeModel
类构造函数中的行,字典是否仍然没有条目?在这种情况下它是空的、空的还是包含数据?@JoannaTurban当我注释掉构造函数中的行时,字典已初始化,但仍然没有条目。@SixtoSaez序列化是我们必须拥有自定义字典的原因,但在这种情况下它没有帮助。尝试了DataContract,但在这里似乎没有什么不同。
public class HomeApiController : ApiController
{
    // POST api/homeapi
    [HttpPost]
    [ActionName("Complex")]
    public string PostComplex([FromBody]HomeModel model)
    {
        return string.Format("vm.ExtraData.Count = {0}", model.ExtraData.Count);
    }
}
    <ul>
    <li>
        <input type="text" name="ExtraData[0].Key" value="Key1"/>
        <input type="text" name="ExtraData[0].Value" value="Value1"/>
    </li>
    <li>
        <input type="text" name="ExtraData[1].Key" value="Key2"/>
        <input type="text" name="ExtraData[1].Value" value="Value2"/>
    </li>
    <li>
        <input type="text" name="ExtraData[2].Key" value="Key3"/>
        <input type="text" name="ExtraData[2].Value" value="Value3"/>
    </li>
</ul>
  var sendFormData = function (addr) {
            var jqxhr = $.post(addr, $('form').serialize())
                .success(function (x) {
                    alert(x);
                })
                .error(function () {
                    alert("Failure");
                });
            return false;
        };

        $("#submitWebApi").click(function () {
            $("form").submit(sendFormData('api/homeapi/complex'));
        });