Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Json Mapping and serializing in C#

i'm trying to map a json string similar to this in c# to an object. my purpose is to send it to my cilent side (it's a jquery application) I was wondering whether i'm doing right ?

{"tasks":[
        {
            "id":-1,
            "name":"Gantt editor",
            "code":"",
            "level":0,
            "status":"STATUS_ACTIVE",
            "start":1372608000000,
            "duration":21,
            "end":1375113599999,
            "startIsMilestone":true,
            "endIsMilestone":false,
            "collapsed":false,
            "assigs":[]
        },
        {
            "id":"tmp_fk1372575559620",
            "name":"release",
            "code":"",
            "level":1,
            "status":"STATUS_ACTIVE",
            "start":1372608000000,
            "duration":1,
            "end":1372694399999,
            "startIsMilestone":false,
            "endIsMilestone":false,
            "collapsed":false,
            "assigs":[]
        }
        ],
"selectedRow":8,
"deletedTaskIds":[],
"resources":
    [
        {
        "id":"tmp_1",
        "name":"Resource 1"
        }
    ],
"roles":[
        {
            "id":"tmp_1",
            "name":"Project Manager"
        }
        ],
"canWrite":true,
"canWriteOnParent":true
}

and this is how i mapped it

public class Attributes
    {    
        public List<Task> _Task { get; set; }
        public List<Resource> _Resource { get; set; }
        public List<Role> _Role { get; set; }
        public bool _canWrite { get; set; }                      //"canWrite":true,
        public bool _canWriteOnParent { get; set; }              //"canWriteOnParent":true,
        public bool _selectedRow { get; set; }                   //"selectedRow":0,
        public string [] _DeletedTaskIds { get; set; }           //"deletedTaskIds":[],
    }

    public class Task
    {
        private string _id { get; set; }
        private string _name { get; set; }
        private string _code { get; set; }
        private int _level { get; set; }
        private string _status { get; set; }
        private int _start { get; set; }              //“start”:1348696800000,
        private int _duration { get; set; }           //“duration”:10,
        private int _end { get; set; }                //“end”:1349906399999,
        private bool _startIsMilestone { get; set; }  //“startIsMilestone”:false,
        private bool _endIsMilestone { get; set; }    //“endIsMilestone”:false,
        public List<Assign> _assigns { get; set; }    //“assigs”:[…],
        private string _depends { get; set; }         //“depends”:”7:3,8″,
        private string _description { get; set; }     //“description”:”Approval of testing”,
        private int _progress { get; set; }           //“progress”:20
    }

    public class Assign 
    {
        private string _resourceId { get; set; }      //“resourceId”:”tmp_1″,
        private string _id { get; set; }              //“id”:”tmp_1345560373990″,
        private string _roleId { get; set; }          //“roleId”:”tmp_1″,
        private string _effort { get; set; }          //“effort”:36000000

    }

    public class Resource
    {
        private string _id { get; set; }              //“id”:”tmp_1″,
        private string _name { get; set; }            //“name”:”Resource 1″
    }

    public class Role
    {
        private string _id { get; set; }              //“id”:”tmp_1″,
        private string _name { get; set; }            //“name”:”Project Manager”
    }

if I'm doing it right, how can I serialize it into an object and send in order to send it to client side ?

like image 660
Poorya Avatar asked Jan 13 '23 18:01

Poorya


1 Answers

Here is a link to a fantastic tool that maps Json to C#, here is what your mapping should look like:

public class Task
{
    public object id { get; set; }
    public string name { get; set; }
    public string code { get; set; }
    public int level { get; set; }
    public string status { get; set; }
    public object start { get; set; }
    public int duration { get; set; }
    public object end { get; set; }
    public bool startIsMilestone { get; set; }
    public bool endIsMilestone { get; set; }
    public bool collapsed { get; set; }
    public List<object> assigs { get; set; }
}

public class Resource
{
    public string id { get; set; }
    public string name { get; set; }
}

public class Role
{
    public string id { get; set; }
    public string name { get; set; }
}

public class RootObject
{
    public List<Task> tasks { get; set; }
    public int selectedRow { get; set; }
    public List<object> deletedTaskIds { get; set; }
    public List<Resource> resources { get; set; }
    public List<Role> roles { get; set; }
    public bool canWrite { get; set; }
    public bool canWriteOnParent { get; set; }
}

There is also another slick way of mapping json to C# (I believe it comes with Visual Studio 2012 -> Web Essentials), you can go Edit-> Paste Special-> Paste JSON as Classes

EDIT

Since you've asked using Json.NET (you can get it from NuGet) you can deserialize your json like this:

RootObject deserialized = JsonConvert.DeserializeObject<RootObject>(data);
like image 84
Dimitar Dimitrov Avatar answered Jan 22 '23 22:01

Dimitar Dimitrov