2016-07-23 6 views
0

Код находится в ASP.NET Core. Контроллер MVC возвращает Json (someData). Я пытаюсь получить данные в тесте Unit. Лучшее, что я могу сделать, это иметьПолучить данные от JsonResult

string data = JsonConvert.SerializeObject(jsonResult.Value); 

, а затем сравнить строку. Но я бы предпочел, чтобы объект или массив могли выполнять некоторые более конкретные сравнения. Интересно, что в отладчике я вижу, что jsonResult.Value имеет тип Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable<MyType>, и даже есть представление результатов, которое предупреждает не расширять его; и если я его расширю, я получаю именно то, что хочу! В моем случае это 4-элементный массив из MyType объектов. Однако, если я что-то вроде from i in jsonResult.Value select i я получаю сообщение об ошибке

Could not find an implementation of the query pattern for source type 'object'. 
'Select' not found 

Я надеюсь, что это лучший способ, чем сравнение строки JSON!

ответ

1

Попробуйте использовать метод Cast

(from i in jsonResult.Value.Cast<MyType>() select i)

Edit: обновленный ответ

from i in ((IQueryable<MyType>)js.Value) select i 
+0

Он не находит Cast ... – Felix

+0

Я думаю, вам просто нужно бросить jsonresult.Value. Попробуйте из i in ((IQueryable < MyType >) js.Value) выберите i – Paresh

+0

Удивительный! Я пробовал 'js.Value как IQueryable ' и он не работал; но почему-то не попробовал '(IQueryable ) js.Value'. Не возражаете, обновляя свой ответ, поэтому я могу принять его! Большое спасибо – Felix

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