[英]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.