在C#中使用JSON.NET或JavaScriptSerializer反序列化JSON对象
对不起,如果这是之前问过,但我试图寻找一些答案,但我找不到一个。在C#中使用JSON.NET或JavaScriptSerializer反序列化JSON对象
反正我也有类似的问题,这个问题: Parsing JSON using Json.net
它解决了一些问题,但感到困惑我的JSON数据。这里是json数据
{ "messages":[ { "message":"hilo", "timestamp":"23:55", "uid1":"7", "name":"shiftypowers" } ], "total_messages":"1", "last_timestamp":"1304265309", "buddylist":{ "476":{ "name":"Gandang_hari", "status":"1" }, "506":{ "name":"ichigo", "status":"1" }, "186":{ "name":"Jinn", "status":"1" }, "7":{ "name":"shiftypowers", "status":"1" }, "total":4 } }
如果您注意到数字476,506,186和7--这些是用户ID,并且将在未来处理数千个用户ID。
问题是,我该如何反序列化?
这里是我的代码
public class ElakoChatPollData { public ElakoChatPollData() { messages = new List(); } public List messages { get; set; } public string total_messages { get; set; } public string last_timestamp { get; set; } public buddylist buddylist { get; set; } } public class messages { public string message { get; set; } public string timestamp { get; set; } public string uid1 { get; set; } public string name { get; set; } } public class buddylist { // what should I put here ?? //public List uid { get; set; } // i don't think this is correct public Dictionary Users { get; private set; } public string total { get; set; } } public class userinfo { public string name { get; set; } public string status { get; set; } } // and serializing the json looks like this JavaScriptSerializer ser = new JavaScriptSerializer(); ChatPollData epd = ser.Deserialize<ChatPollData>(jsonchatpoll); Console.Writeline(epd.buddylist.Users[0].name); // i get Object reference not set ~~~~
如果上面的代码是正确的。如何可以我能够得到用户的id?和顺便说一句,json的数据将从drupal模块(drupalchat)请求
一个简单的解决方案是使用newtonsoft json库中包含的linq-to-json类。然后你需要手动实例化你的对象,但是考虑到你的非常简单的文件格式,应该不会有太多的工作。
手动做这件事的好处在于数据格式和内存格式可能会有很大的不同。
// public List<userinfo> uid { get; set; }; // i don't think this is correct
public Dictionary<int,UserInfo> Users{get;private set;}//I might use something like this
如果要使用那会是这样的吗? buddylist.Users [0] .NAME?或buddylist.Users [476] .name? – jaysonragasa 2011-05-01 18:15:31
请检查上面更新的代码吗? – jaysonragasa 2011-05-01 18:22:17
你能修改上面的JSON来包含这样的uid吗? '“uid”:“476”, “userinfo”:{ “name”:“Gandang_hari”, “status”:“1” }' – 2011-05-01 17:54:25
nope。上述JSON数据将通过网址从drupalchat模块请求 – jaysonragasa 2011-05-01 17:56:00
请我需要一个答案 – jaysonragasa 2011-05-02 06:29:02