json.net将字符串反序列化为类

时间:2013-05-18 13:47:24

标签: c# class json.net

我在我的服务器上创建了一个json文件,用于通过JSON.NET反序列化将数据发送到c#程序。但是我得到一个null对象异常,任何人都可以告诉我如何创建类。谢谢 我的班级在这里

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Newtonsoft.Json;

namespace WindowsFormsApplication4
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        Load();
    }
    public void Load()
    {
        label1.Text = "State:\nLoading...";
        try
        {
            Products pd = new Products();
            using (var webClient = new System.Net.WebClient())
            {
                // download json from url
                var json = webClient.DownloadString(url);
                // Now parse with JSON.Net
                Products convert = JsonConvert.DeserializeObject<Products>(json) as Products;
                label1.Text += pd.info.ToString();
                label1.Text += "\nWeb Service Connected To";
            }
        }
        catch (JsonSerializationException jsonerr) { label1.Text += "\nWeb Service Connection Failed"; MessageBox.Show(jsonerr.ToString()); }
        catch (Exception err) { throw; }
        finally { label1.Text += "\nWeb Service Closed"; }
    }
}

}

public class Products
{
    public Info info;

    [JsonProperty("post")]
    public Info infos
    {
        get { return info; }
        set { info = value; }
    }
}

public class Info
{
    private string pd_name;
    private int pd_id;

    [JsonProperty("pd_id")]
    public int pd_ids
    {
        get { return pd_id; }
        set { pd_id = value; }
    }

    [JsonProperty("pd_name")]
    public string pd_names
    {
        get { return pd_name; }
        set { pd_name = value; }
    }
}

1 个答案:

答案 0 :(得分:1)

您没有处理JSON中的posts值。因此,如果您的JSON格式如下:

{ "posts" : [ { "post" : { "pd_id" : "399", 
                           "pd_name" : "1.2mm  Cylinder Labret"} },
              { "post" : { "pd_id" : "415", 
                           "pd_name" : "1.2mm  Laser Etched Labret" }}
            ] }

尝试设置这样的课程:

public class Posts
{
    public List<Products> posts { get; set; }
}

public class Products
{
    public List<Info> post { get; set; }
}

public class Info
{
    public string pd_id { get; set; }
    public string pd_name {get; set; }
}