我是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);
我总是收到这样的错误:
值不能为null。
以下是我想要用检索到的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;
您发布的json字符串包含的内容远不止一个Post
。要反序列化它,您必须为json字符串中包含的所有对象设计类,这样您就可以通过访问属性来浏览数据。
这些类别可以如下:
class Feed {
public RootTab root_tab { get; set; }
}
class RootTab {
public TabActuFil tab_actu_fil {get; set; }
}
class TabActuFil {
public List<Post> data { get; set; }
}
class Post {
public string c_origine {get; set; }
public string titre {get; set; }
}