为什么MVC3模型绑定器不解析List <list <int>&gt;中包含空List <int>?</int> </list <int>

时间:2012-05-03 20:09:42

标签: c# asp.net-mvc json asp.net-mvc-3 model-binding

我有一种List<List<int>>,我试图让MVC3中的模型绑定器解析并失败。我的控制器将该类型作为参数,当我发送完全填充的列表时,它可以工作。

有效,正确解析/绑定数据

[ [ 22, 12, 9 ], [1, 2, 3], [5] ]

只要我将相同的数据结构发送到控制器,但这次使用空数组,它就会停止解析外部集合。下面是粘合剂扼杀的一些数据:

有效,不正确地解析/绑定数据

[ [ 4, 5], [], [6, 7] ]

该值与List<List<int>>绑定,但长度为1,第一项为List<int>的{​​{1}}

那么,当某些4, 5是空列表时,如何让模型绑定器接受List<List<int>>?我需要上面显示的“有效,不正确解析/绑定”数据才能工作。

更糟糕的是List<int>中没有绑定错误!

如果重要的话,这也是作为JSON发送给控制器的(通过ModelState)。我想如果这是一个bug,它可能特定于那个json模型绑定器。

1 个答案:

答案 0 :(得分:0)

这必须只是模型绑定器中的实现细节或实现错误。如果您为空null传递[]而不是List<int>,则可以正常使用。

此解决方法的一个奇怪细节是null值转换为空List<int>

如果你发送

[ [ 4, 5], null, [6, 7] ]

然后List<List<int>>中的项目将是:

 [0] = List<int> {4, 5}
 [1] = List<int> {}
 [2] = List<int> {6, 7}

我仔细检查过,索引1肯定是一个空列表,你可以访问它的Count等。

此外,MVC中的默认Json序列化程序会将该列表序列化为

[ [ 4, 5], [], [6, 7] ]

而不是

[ [ 4, 5], null, [6, 7] ]

趣味。