簡體   English   中英

Json映射和C#中的序列化

[英]Json Mapping and serializing in C#

我正在嘗試將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”
    }

如果我做得對,如何將其序列化為對象並發送以便將其發送到客戶端?

是一個將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 - > Web Essentials),你可以去Edit - > Paste Special - >將Paste JSON as Classes

編輯

既然你已經要求使用Json.NET (你可以從NuGet獲得它),你可以像這樣反序列化你的json:

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

您需要更改的類及其屬性的格式。 這是正確的格式。 試試吧。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM