I ran into a situation where I found a need for a compound class that contained bits and pieces from quite a few other classes. The class would only be used for pushing data to the front end as a JSON formatted response in this rather special scenario. Rather than defining a new model/class I found that you can use an anonymous class and serialize it.
A brief note on the missing [DataContract]/[DataMember] and [Serializable] attributes, they are not needed for serializing public fields or properties in .NET 3.5 SP1.
A brief note on the missing [DataContract]/[DataMember] and [Serializable] attributes, they are not needed for serializing public fields or properties in .NET 3.5 SP1.
Here are the predefined contrived classes
namespace MvcApplication1.Models { public class Contact { public string Name { get; set; } public string PreferedEmail { get; set; } } }
namespace MvcApplication1.Models { public class ContactDetails { public string[] Emails { get; set; } } }
controller
using System.Web.Mvc; using MvcApplication1.Models; using System.Web.Script.Serialization; namespace MvcApplication1.Controllers { public class HomeController : Controller { ////// Shows serializing a new anonymous class that contains some preexisting classes /// And serializing this using the JavaScriptSerializer /// ///public ActionResult SerializeAnonymousClassToJson() { var compositeContacts = new { MyContact = new Contact() { Name = "Donald Duck", PreferedEmail = "donaldduck@disney.com" }, MyContactDetails = new ContactDetails() { Emails = new[] { "donald@disney.com", "unclescroogenephew@scrooge.com" } } }; JavaScriptSerializer jss = new JavaScriptSerializer(); ViewData["Json"] = jss.Serialize(compositeContacts); return View(); } } }
and view.
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<dynamic>" %> <%= ViewData["Json"]%>
and the serialized data looks like this
{"MyContact":{"Name":"Donald Duck","PreferedEmail":"donaldduck@disney.com"},"MyContactDetails":{"Emails":["donald@disney.com","unclescroogenephew@scrooge.com"]}}
No comments:
Post a Comment