Fasil Hayat's blog

...C#, .Net, Sharepoint, BizTalk, JQuery...
maj
18

JSON.net

af Fasil | Tags: , , ,

Efter en meget lang og sej kamp med den indbyggede json funktionalitet i .net, blev jeg nødt til at kaste håndklædet ved at gøre brug af json.net istedet. Dette lille json hjælpe bibliotek kunne uden problemer serialisere mine komplekse objekter til json.

string json = JsonConvert.SerializeObject(mitobjekt);
return json;

Læs mere her.


Der er ikke mange, der er klar over man sagtens kan få en WCF service til at respondere i JSON formatet. Dette har jeg typisk brugt i AJAX sammenhænge, hvor man kan undlade at bruge en *.aspx side, og i stedet benytte sig af en WCF service på UI laget, der asynkront kan kaldes fra fx. JQuery. Denne WCF service er udelukkende designet til at understøtte asynkrone kald. De metoder man fx. fra JQuery kalder består af nedenstående kontrakt definitioner.
Navnet på WCF service er i dette eksempel 'Service.svc'.

   1:  [ServiceContract(Namespace = "SilverAria.SAM.Service")]
   2:  [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
   3:  [AspNetCompatibilityRequirements(RequirementsMode=
   4:  AspNetCompatibilityRequirementsMode.Allowed)]
   5:  public class Service {
   6:    [OperationContract]
   7:    [WebGet(ResponseFormat=WebMessageFormat.Json, BodyStyle=
   8:  WebMessageBodyStyle.Bare)]
   9:    public Role GetConfiguredSkills(int roleId) {          
  10:       var control = new RenwarRoleConfigurationControl();
  11:       var role = control.PopulateConfiguredSkills(roleId);
  12:       var returnObj = new Role {
  13:           ConfiguredSkills = role.ConfiguredSkills,
  14:           UnconfiguredSkills = role.UnconfiguredSkills
  15:       };
  16:       return returnObj;
  17:    }
  18:  }


I JQuery vil kaldet af metoden se ud på følgende måde:

   1:  $(document).ready(function() {
   2:      $("#roleId").change(function() {
   3:          $("#requiredSkills").empty();
   4:          $("#skills").empty();
   5:          var idValue = $("#roleId").val();
   6:          $.getJSON("Service.svc/GetConfiguredSkills", { roleId: idValue },
   7:          function(data) {
   8:              $.each(data.ConfiguredSkills, function(i, 
   9:                  ConfiguredSkills) {
  10:                  $("<option>" + ConfiguredSkills.Name + ", Lvl " +
  11:                  ConfiguredSkills.Level + "</option>").attr("value",
  12:                  ConfiguredSkills.Id + "#" +
  13:                  ConfiguredSkills.Level).appendTo("#requiredSkills");
  14:              });
  15:              $.each(data.UnconfiguredSkills, 
  16:                function(a, UnconfiguredSkills) {
  17:                  $("<option>" + UnconfiguredSkills.Name + 
  18:                  "</option>").attr("value",
  19:                  UnconfiguredSkills.Id).appendTo("#skills");
  20:              });
  21:          });
  22:          return false;
  23:      });
  24:  });


WCF kaldet leverer data i JSON format, som man så ved hjælp af JQuery 'pakker' ud, og beriger html kontrollerne med. Meget mere elegant løsning istedet for at have en 'dummy' *.aspx side, der reagerer på querystring værdier.



Fasil Malik Hayat

Developer
.Net, WCF, Sharepoint, MOSS, Biztalk, JQuery.

linkedin facebook twitter plaxo google+ grooveshark boxee
fasil

Education

fasil

Bachelor of Science (Honours)
De Montfort University, Leicester.

Fag: Java, MVC, Information Strategy, ITIL

Microsoft Certified Technology Specialist

Skills

.net vs2010 - C# sharepoint sql server jquery ubuntu java netbeans


  

Sign in