He encontrado que por lo general para el complejo de objetos a su alcance para serializar simplemente mediante la creación de un objeto temporal 'entre medio':
Por ejemplo, para testimonios que hacer lo siguiente. De hecho, hago esto en el código subyacente para mi página de modelo ASPX.
Esto crea un buen objeto JSON. Notarás que incluso puedo refacturar mi modelo y la página seguirá funcionando. Es solo otra capa de abstracción entre el modelo de datos y la página. No creo que mi controlador deba saber sobre JSON tanto como sea posible, pero el 'código subyacente' de ASPX ciertamente puede.
/// <summary>
/// Get JSON for testimonials
/// </summary>
public string TestimonialsJSON
{
get
{
return Model.Testimonials.Select(
x => new
{
testimonial = x.TestimonialText,
name = x.name
}
).ToJSON();
}
}
En mi ASPX acabo de hacer esto en un bloque:
var testimonials = <%= TestimonialsJSON %>;
// oh and ToJSON() is an extension method
public static class ObjectExtensions
{
public static string ToJSON(this Object obj)
{
return new JavaScriptSerializer().Serialize(obj);
}
}
Estoy listo para la reacción en contra de esta sugerencia ... lo trae en ...
I' no estoy accediendo a los datos, simplemente reformateando un modelo para la Vista. Esta es lógica de "ver modelo", no lógica de "modelo de controlador".
¿Qué serializador estás usando? –
JsonResult es mi tipo de devolución, así que supongo que el serializador es el predeterminado en la clase de controlador de ASP.NET MVC 1.0. – JMP
¿Cuál es el JavaScriptSerializer? – womp