2016-06-02 2 views
1

Я отправляю этот json в asp.net web api action.Deserialize массив JSON с пропущенными элементами

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

Этот JSON является POST-е изд именно так, как это в теле запроса на мое действие asp.net 4.5 веб-апи 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); 
    } 

Что происходит, что 2а десериализируется в массив из 3 элементов вместо 8 элементов с нулевыми или пустыми элементами 2 до 6 и 7.

Что я могу сделать, чтобы desserialize пропущенных элементов массива, как defaults (nulls или пустые строки)?

+1

какую библиотеку вы используете для десериализации? Newtonsoft имеет специальные функции, такие как nullhandling и missingmemberhandling, может стоить проверить –

+0

Я использую стандартную библиотеку, которая используется для привязки аргументов в asp mvc. Это JsonMediaTypeFormatter, основанный на http://json.codeplex.com/ Я даже не могу узнать, является ли эталонное поведение для json или предметной библиотеки. – doker

+0

это newtonsoft, проверьте свойство NullValueHandling в классе JsonSerializer, которое вы можете установить для Include и попробуйте –

ответ

1

Это недопустимая строка json. Хотя некоторые json-парсеры игнорируют плохой синтаксис. И C#/javascript не позволяет создавать свойства, начинающиеся с цифр (2a в этом случае) [JSON.Net doesn't complain though]. Строка json должна содержать key/value s, разделенных запятой (,).

Смежные вопросы