Dot-Net
JSON.NET 反序列化
我是 JSON.NET 的新手,我正在嘗試將 JSON 字元串反序列化為一個簡單的 .NET 對象。這是我的程式碼片段:
public void DeserializeFeed(string feed) { JsonSerializer ser = new JsonSerializer(); Post deserializedPost = JsonConvert.DeserializeObject<Post>(feed); if (deserializedPost == null) MessageBox.Show("JSON ERROR !"); else { MessageBox.Show(deserializedPost.titre); } }當我做
MessageBox.Show(deserializedPost.titre);我總是收到這個錯誤:
值不能為空。
這是我想用檢索到的 JSON 元素填充的對象:
using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Ink; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; namespace MeltyGeeks { public class Post { public String titre { get; set; } public String aresum { get; set; } // Constructor public Post() { } } }這是我的 JSON 字元串的片段:
{"root_tab":{"tab_actu_fil":{"data":[{"c_origine":"MyApp", "titre":"title of first article", "aresum":"this is my first Article "tab_medias":{"order":{"810710":{"id_media":810710,"type":"article","format":"image","height":138,"width":300,"status":null}}}},
您顯示的 JSON 結構與 Post 對像不匹配。您可以定義其他類來表示此結構:
public class Root { public RootTab root_tab { get; set; } } public class RootTab { public ActuFil tab_actu_fil { get; set; } } public class ActuFil { public Post[] Data { get; set; } } public class Post { public String titre { get; set; } public String aresum { get; set; } }接著:
string feed = ... Root root = JsonConvert.DeserializeObject<Root>(feed); Post post = root.root_tab.tab_actu_fil.Data[0];或者如果你不想定義那些額外的對象,你可以這樣做:
var root = JsonConvert.DeserializeObject<JObject>(feed); Post[] posts = root["root_tab"]["tab_actu_fil"]["data"].ToObject<Post[]>(); string titre = posts[0].titre;