Json Mapping and Serialization in C #

I am trying to match a json string like this in C # with an object. my goal is to send it to my yellow side (this is a jquery application) I was wondering if I am doing the right thing?

{"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 displayed 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 do it right, how can I serialize it to an object and send to send it to the client side?

+4
source share
2 answers

Here 's a link to a fantastic tool that displays Json in 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 way to map 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 asked to use Json.NET (you can get it from NuGet ), you can deserialize your json like this:

 RootObject deserialized = JsonConvert.DeserializeObject<RootObject>(data); 
+8
source

The format for the classes and their properties that need to be changed. Here is the correct format. Give it a try.

 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; } } 
+1
source

Source: https://habr.com/ru/post/1494642/


All Articles