Question

I have used a gantt chart in my C# project which was from http://gantt.twproject.com/distrib/gantt.html. If you click the export button we get a json from the gantt. i am passing the same json to my wcf as below.

function WCFJSON(ganttData) {

     console.log(ganttData); //Object 
     var gdata = JSON.stringify(ganttData);        
     console.log(gdata);

     $.ajax({
         type: "POST",  
         url: "../../GanttService.svc/SaveGanttData", // Location of the service
         data: gdata, //Data sent to server
         contentType: "application/json; charset=utf-8",  
         dataType: "json", //Expected data format from server
         processdata: true, //True or False
         success: function (msg) {//On Successfull service call
             ServiceSucceeded(msg);
         },
         error: ServiceFailed// When Service call fails
     });
 }

This is the json in gdata variable.

"{"tasks":[{"id":-1,"name":"Gantt editor","code":"","level":0,"status":"STATUS_ACTIVE","start":1386527400000,"duration":30,"end":1390415399999,"startIsMilestone":true,"endIsMilestone":false,"collapsed":false,"assigs":[{"id":"tmp_1386591686448","resourceId":"tmp_1","roleId":"tmp_1","effort":0}],"description":"","progress":0},{"id":-2,"name":"codings","code":"","level":1,"status":"STATUS_ACTIVE","start":1386527400000,"duration":10,"end":1387564199999,"startIsMilestone":false,"endIsMilestone":false,"collapsed":false,"assigs":[],"description":"","progress":0},{"id":-3,"name":"gant parts","code":"","level":2,"status":"STATUS_ACTIVE","start":1386527400000,"duration":2,"end":1386700199999,"startIsMilestone":false,"endIsMilestone":false,"collapsed":false,"assigs":[],"depends":""},{"id":-4,"name":"editor parts","code":"","level":2,"status":"STATUS_SUSPENDED","start":1386700200000,"duration":4,"end":1387218599999,"startIsMilestone":false,"endIsMilestone":false,"collapsed":false,"assigs":[],"depends":"3"},{"id":-5,"name":"testings","code":"","level":1,"status":"STATUS_SUSPENDED","start":1388601000000,"duration":15,"end":1390415399999,"startIsMilestone":false,"endIsMilestone":false,"collapsed":false,"assigs":[],"depends":"2:5","description":"","progress":0},{"id":-6,"name":"test on safari","code":"","level":2,"status":"STATUS_SUSPENDED","start":1389810600000,"duration":2,"end":1389983399999,"startIsMilestone":false,"endIsMilestone":false,"collapsed":false,"assigs":[],"depends":""},{"id":-7,"name":"test on ie","code":"","level":2,"status":"STATUS_SUSPENDED","start":1390156200000,"duration":3,"end":1390415399999,"startIsMilestone":false,"endIsMilestone":false,"collapsed":false,"assigs":[],"depends":"6"},{"id":-8,"name":"test on chrome","code":"","level":2,"status":"STATUS_SUSPENDED","start":1390156200000,"duration":2,"end":1390328999999,"startIsMilestone":false,"endIsMilestone":false,"collapsed":false,"assigs":[],"depends":"6"}],"selectedRow":2,"deletedTaskIds":[],"resources":[{"id":"tmp_1","name":"Resource 1"},{"id":"tmp_2","name":"Resource 2"},{"id":"tmp_3","name":"Resource 3"},{"id":"tmp_4","name":"Resource 4"},{"id":"tmp_5","name":"Resource 5"},{"id":"tmp_6","name":"Resource 6"},{"id":"tmp_7","name":"Resource 7"},{"id":"tmp_8","name":"Resource 8"},{"id":"tmp_9","name":"Resource 9"},{"id":"tmp_10","name":"Resource 10"}],"roles":[{"id":"tmp_1","name":"Project Managers"},{"id":"tmp_2","name":"Worker"},{"id":"tmp_3","name":"Stakeholder/Customer"}],"canWrite":true,"canWriteOnParent":true}"

My WCF Method is

  public string SaveGanttData(String tasks)
    {
        try
        { 
            var apps = JsonConvert.DeserializeObject<Tasks>(tasks);
            var retValue = "";
            foreach (var task in apps.tasks)
            {                    
                retValue += "Name - " + task.name + " Code - " + task.code;
            }
            Console.ReadLine();
            return string.Format("You entered: {0}", retValue);
        }
        catch (Exception ex)
        {
            return string.Format("Failed: {0}", ex.Message);
        }

    }

Always null is shown in the browser console after the service is hit. i have tried in several ways but unable to pass the exact json data to my wcf. please help me!

Was it helpful?

Solution

Your service is accepting only single string, while you are sending more complex JSON in form:

  • tasks - array of objects
  • selectedRow - integer
  • deletedTaskIds - array of objects
  • resources - array of objects
  • roles - array of objects
  • canWrite - boolean
  • canWriteOnParent - boolean

If you are using Visual Studio 2013, copy JSON to clipboard and paste it to Visual Studio using menu Edit > Paste Special > Paste JSON As Classes to see proper class representing this JSON from C# perspective.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top