Json映射和C#中的序列化

时间:2013-08-01 05:56:33

标签: c# json serialization

我正在尝试将c#中与此类似的json字符串映射到一个对象。 我的目的是将它发送到我的安静的一面(这是一个jquery应用程序) 我想知道我做得对吗?

{"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
}

这是我映射的方式

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”
    }

如果我做得对,如何将其序列化为对象并发送以便将其发送到客户端?

2 个答案:

答案 0 :(得分:8)

Here是指向将Json映射到C#的奇妙工具的链接,这是您的映射应该是这样的:

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; }
}

还有另一种将json映射到C#的方式(我相信它附带Visual Studio 2012 - &gt; Web Essentials),你可以去Edit - &gt; Paste Special - &GT; Paste JSON as Classes

修改

由于您已经要求使用Json.NET(您可以从NuGet获取),您可以像这样反序列化您的json:

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

答案 1 :(得分:1)

您需要更改的类及其属性的格式。这是正确的格式。 试试吧。

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; }
}