#c# #json #asp.net-core #asp.net-core-3.1
#c# #json #asp.net-core #asp.net-core-3.1
Вопрос:
Я пытаюсь прочитать файл .json и вернуть значение в виде таблицы в asp .net Core 3.1! Я новичок в работе с asp .net Core, поэтому, пожалуйста, помогите мне с точки зрения новичков.
Рассмотрим приведенный ниже фрагмент кода. Моя проблема в том, что я не могу передать значения из контроллера в представление.
Я сталкиваюсь с этим исключением:
An unhandled exception occurred while processing the request.
InvalidOperationException: The model item passed into the ViewDataDictionary is of type '.Sample.Models.Mstype', but this ViewDataDictionary instance requires a model item of type 'Sample.Models.Mstypes'.
Контроллер
public IActionResult Run()
{
...
var webClient = new WebClient();
var json = webClient.DownloadString(@"/app/results/type.json");
var mstypes = JsonConvert.DeserializeObject<Mstype>(json);
return View(mstypes);
}
Mstype.cs
public int CIS { get; set; }
public int PPMS { get; set; }
public int RRMS { get; set; }
public int SPMS { get; set; }
public int not_sure { get; set; }
Mstypes.cs
public class Mstypes
{
public IList<Mstype> mstypes { get; set; }
}
Вид
@model Fed_PiP.Models.Mstypes
@{
ViewData["Title"] = "Run";
}
<table class="table">
<thead>
<tr>
<th>
@Html.DisplayNameFor(Model => Model.mstypes[0].CIS)
</th>
<th>
@Html.DisplayNameFor(Model => Model.mstypes[0].PPMS)
</th>
<th>
@Html.DisplayNameFor(Model => Model.mstypes[0].RRMS)
</th>
<th>
@Html.DisplayNameFor(Model => Model.mstypes[0].SPMS)
</th>
<th>
@Html.DisplayNameFor(Model => Model.mstypes[0].not_sure)
</th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td>
@Model.mstypes.FirstOrDefault().CIS
</td>
<td>
@Model.mstypes.FirstOrDefault().PPMS
</td>
<td>
@Model.mstypes.FirstOrDefault().RRMS
</td>
<td>
@Model.mstypes.FirstOrDefault().SPMS
</td>
<td>
@Model.mstypes.FirstOrDefault().not_sure
</td>
</tr>
</tbody>
</table>
и, наконец
файл json
{"CIS":11,"PPMS":12,"RRMS":6,"SPMS":11,"not_sure":10}
кроме того, у меня есть вопрос
есть ли какой-либо способ создать динамическую таблицу из статических файлов JSON?
Я имею в виду, не определяя модель или ViewModel, просто читая и возвращая значения из статического файла в таблицы?
Комментарии:
1. Какой тип модели объявлен в представлении? Я думаю, вам следует сделать
JsonConvert.DeserializeObject<Mstypes>(json)
2. @ChetanRanpariya Я также обновил снип, Mstypes
Ответ №1:
Из сообщения об ошибке очень ясно, что представление принимает модель Mstypes
типа, пока вы передаете Mstype
ему.
Таким образом, вы можете инкапсулировать, mstypes
преобразовать его в Mstypes
тип в вашем контроллере.
public IActionResult Run()
{
var json = "{ 'CIS':11,'PPMS':12,'RRMS':6,'SPMS':11,'not_sure':10}";
var mstype1 = JsonConvert.DeserializeObject<Mstype>(json);
Mstypes mstypes = new Mstypes
{
mstypes = new List<Mstype> { mstype1 }
};
return View(mstypes);
}
Результат:
Комментарии:
1. Отлично, работает! Спасибо!
Ответ №2:
Что, если вы измените:
var mstypes = JsonConvert.DeserializeObject<Mstype>(json);
Для
var mstypes = JsonConvert.DeserializeObject<Mstypes>(json);
Ваш .файл json должен быть чем-то вроде:
{
mstypes : [
{"CIS":11,"PPMS":12,"RRMS":6,"SPMS":11,"not_sure":10},
{"CIS":11,"PPMS":12,"RRMS":6,"SPMS":11,"not_sure":10},
{"CIS":11,"PPMS":12,"RRMS":6,"SPMS":11,"not_sure":10},
{"CIS":11,"PPMS":12,"RRMS":6,"SPMS":11,"not_sure":10},
{"CIS":11,"PPMS":12,"RRMS":6,"SPMS":11,"not_sure":10},
]
}
Комментарии:
1. Спасибо! Но он вернул нулевое значение! (Параметр ‘source’) >
2. Ваш файл json не отражает схему, которую вы хотите, и использовать в вашем представлении
3. каким он должен быть?
4. Чтобы соответствовать приведенному выше json, тип должен быть
Mstype[]
как для@Model
строки, так и для вызоваDeserializeObject