2017-02-22 16 views
0

, когда кто-то посылает неверный JSON в мой WebAPI:Json Deserialize, положить пустые элементы в массив

"items" : [ 
     , 
     {    
      ... 
     } 
] 

то десериализация не подведет и ставит «пустое» значение в качестве первого элемента массива, это возможно ли отказ json deserialiser и вернуть ошибку? или просто удалите нулевые элементы из массива.

Я уже пробовал добавлять конвертер, где я могу удалить пустые элементы, но я не могу найти источник, как работает сериализация существующего массива (de).

Я нашел MassTransit.Serialization.ListJsonConverter, который может десериализовать List/Array, поэтому я переопределяю его метод десериализации на основе вызова и проверяю результат, если он содержит нулевые значения, просто генерирует исключение, но для меня странно, что Newtonsoft.Json не содержит массив конвертер

как для WebAPI я не хочу, чтобы разобрать что-либо самостоятельно, так единственно возможное решение для расширения существующих методов десериализации

+3

Возможно, была одна из причин, по которой ваш Json не в правильном формате. – Valkyrie

+0

Valkyriee прав, лучший способ - устранить причину поврежденных данных, а не заниматься этим. – Robert

+0

Я знаю, что это неверно, но десериализатор не терпит неудачу, и ошибка сервера не является хорошим ответом на недопустимый json, поэтому он должен отправить ответ об ошибке с правильным описанием, где ошибка в json или просто исключить нулевые элементы. –

ответ

-1

в связи с вашим комментарием. Вы можете разобрать строку JSON, как это:

string jsonString = "SOME JSON STRING"; 
try 
{ 
    JsonValue.Parse(jsonString); 
} 
catch (FormatException fex) 
{ 
    //handle formatting exceptions 
} 
catch (Exception ex) //some other exception 
{ 
    //handle other exceptions 
} 

На FormatException вы можете вернуть некоторые ценные ответ.

+0

Проблема в том, что текущий код с показанным вводом не генерирует исключения. – CodeCaster