使用跳过的元素反序列化JSON数组

时间:2016-06-02 10:39:22

标签: c# arrays json asp.net-mvc-4 asp.net-web-api

我将这种json发送到asp.net web api行动。

{
  "keys": {
     "2a":["C",,,,,"0",,"0"]
  }
} 

这个json与我的asp.net 4.5 web api 2动作的请求主体完全相同。

[RoutePrefix("api/TImport")]
[Authorize]
public class TImportController : ApiController
{

    [Route("")]
    [HttpPost]
    public async Task<TImportResult> Post(TImportParameters parameters)
    {
        // parameters.Keys["2a"] got deserialized as array[3] {"C","0","0" }   :(( 
        return await new TImport().RunAsync(parameters);
    }

所发生的是2a被反序列化为3个元素的数组,而不是8个元素,其中空元素或空元素为2到6和7。

如何将跳过的数组元素反序列化为默认值(空值或空字符串)?

1 个答案:

答案 0 :(得分:1)

这是一个无效的json字符串。虽然一些json解析器忽略了错误的语法。并且C# / javascript不允许您创建以数字开头的属性(在本例中为2a)[JSON.Net doesn't complain though]。 json字符串应包含以逗号(key/value)分隔的,