Прочитайте статический файл Json и просмотрите его как таблицу в ASP.Net Core

#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