Cómo obtener un objeto JSON del objeto Razor Model en javascript

4 minutos de lectura

avatar de usuario
dsi

En el objeto viewmodel, a continuación se muestra la propiedad:

  public IList<CollegeInformationDTO> CollegeInformationlist { get; set; }

En VER, javascript es el siguiente:

   var obj = JSON.stringify('@Model.CollegeInformationlist');
   alert(obj[1].State);  //NOT WORKING, giving string char

      $.each('@Model.CollegeInformationlist', function (i, item) {
    var obj = JSON.stringify(item);
    var r = $.parseJSON(obj);
    alert(r.State);    //just giving undefined.
    });

Guíe aquí, cómo puedo obtener un objeto JSON en javascript.

  • su javascript no sabe cómo se ve su clase CollegeInformationDTO. En mi último trabajo definimos un objeto en el script con la misma estructura que el modelo y luego hicimos un jquery .map para mapear el modelo al objeto javascript. También asegúrese de que lo que está pasando a la vista sea una cadena JSON

    – Matt corporal

    13/10/2014 a las 15:58


  • Debe serializar su objeto Modelo en JSON. Debe crear un método (o propiedad) que devuelva ese resultado.

    – musefan

    13/10/2014 a las 16:00

  • ¿Puedes compartirme algunas cosas para hacer esto? aquí, escribí var obj = JSON.stringify('@Model.CollegeInformationlist'); por lo tanto, debería convertirse en un objeto JSON y poder dar resultados cuando se escribe explícitamente .State propiedad, pero no funciona como una forma. Parece que OBJECT se convierte en tipo de cadena.

    – dsi

    13/10/2014 a las 16:05

avatar de usuario
hutconoide

Podrías usar lo siguiente:

var json = @Html.Raw(Json.Encode(@Model.CollegeInformationlist));

Esto daría como resultado lo siguiente (sin ver su modelo, solo he incluido un campo):

<script>
    var json = [{"State":"a state"}];   
</script>

violín de trabajo

AspNetCore

Usos de AspNetCore Json.Serialize en lugar de Json.Encode

var json = @Html.Raw(Json.Serialize(@Model.CollegeInformationlist));

MVC 5/6

Puedes usar Newtonsoft para esto:

    @Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(Model, 
Newtonsoft.Json.Formatting.Indented))

Esto le da más control del formato json, es decir, sangría como arriba, camelcasing, etc.

  • No pude encontrar la referencia JSON, obteniendo un error como The name 'Json' does not exist in the current context si agrego, Newtonsoft.Json. después, Encode extraviado.

    – dsi

    13/10/2014 a las 16:20

  • Para cualquiera que use AspNetCore, eso usa Json.Serialize en vez de Json.Encode.

    – Verdadera Voluntad

    10 mayo 2017 a las 14:49

  • Para versiones más nuevas de MVC 5/6 @Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(Model, Newtonsoft.Json.Formatting.Indented))

    – Señor Darth Vader

    14 de julio de 2017 a las 12:17


  • @ R2D2 un giro adicional a su sugerencia: JsonConvert.SerializeObject(Model, Newtonsoft.Json.Formatting.Indented, new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver() }) esto también asegura JavaScript CamelCase adecuado (o debería decir camelCase) para el JSON serializado.

    – Al Dass

    13 de marzo de 2018 a las 2:46


  • @Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(Model, Newtonsoft.Json.Formatting.Indented)) funcionó para mí

    – smj

    9 de mayo de 2018 a las 2:37

En ASP.NET Core, el IJsonHelper.Serialize() devoluciones IHtmlContent por lo que no necesita envolverlo con una llamada a Html.Raw().

Debería ser tan simple como:

<script>
  var json = @Json.Serialize(Model.CollegeInformationlist);
</script>

avatar de usuario
Federico Martín

Después de usar el códigovar json = @Html.Raw(Json.Encode(@Model.CollegeInformationlist));

necesitas usar JSON.parse(JSON.stringify(json));

  • Cosa pequeña, pero debe formatear su segmento de código en la segunda línea. Es una edición demasiado pequeña, por lo que no me deja hacerlo.

    – Miguel

    6 de abril de 2018 a las 18:11


  • Por que lo harias JSON.stringify y JSON.parse justo uno tras otro? No sería necesario y desperdiciaría los recursos.

    – Pedro Iván

    18 de noviembre de 2019 a las 10:20

  • Tener sentido. Necesito probar si funciona sin JSON.stringify. creo que solo JSON.parse(@Html.Raw(Json.Encode(@Model.CollegeInformationlist))) Deberia trabajar. Alguien puede probar y avisarnos. Pero ahora lo uso de esa manera y me funciona.

    – Federico Martins

    29 de noviembre de 2019 a las 19:06


Si desea crear un objeto json a partir de su modelo, haga lo siguiente:

  foreach (var item in Persons)
   {
    var jsonObj=["FirstName":"@item.FirstName"]
   }

O usar Json.Net para hacer json a partir de tu modelo:

string json = JsonConvert.SerializeObject(person);

Pase el objeto del controlador a la vista, conviértalo en marcado sin codificación y analícelo en json.

@model IEnumerable<CollegeInformationDTO>

@section Scripts{
    <script>
          var jsArray = JSON.parse('@Html.Raw(Json.Encode(@Model))');
    </script>
}

  • ¿Por qué envolvería el resultado entre comillas y JSON.parse justo uno tras otro? No sería necesario y desperdiciaría los recursos.

    – Pedro Iván

    18 de noviembre de 2019 a las 10:21

avatar de usuario
ciudadano

El siguiente código funcionó para mí.

var chartD =  JSON.parse(JSON.stringify([@Json.Serialize(@Model)]));

  • ¿Por qué envolvería el resultado entre comillas y JSON.parse justo uno tras otro? No sería necesario y desperdiciaría los recursos.

    – Pedro Iván

    18 de noviembre de 2019 a las 10:21

¿Ha sido útil esta solución?