如何使用Newtonsoft.Json

时间:2017-11-07 11:56:29

标签: c# .net json json.net

我想生成如下的JSON:

{
 "Users" :
 [
   {
       "userData":
    [
      {
        "id" : "1",
        "name" : "zbc"
      },
      {
        "id" : "2",
        "name" : "vyz"
      }
    ],
    "Main id" : "ae44",
    "Main dept" : "Bmoa"
   },
  {
       "userData":
    [
      {
        "id" : "5",
        "name" : "as"
      },
      {
        "id" : "7",
        "name" : "ss"
      }
    ],
    "Main id" : "ae99",
    "Main dept" : "Bsds"
   }
]
}

现在这个userData数组是使用DataSet来的。

我使用了以下代码:

 DataTable dt = new DataTable();
        dt.Columns.Add("id", typeof(string));
        dt.Columns.Add("name", typeof(string));

        DataSet dsDept = new DataSet();
        dsDept = cls.ReturnDataSet("sp_users",
            new SqlParameter("@Field", "*"),
            new SqlParameter("@TblNm", "Users"));

       for (int idsDept = 0; idsDept < dsDept.Tables[0].Rows.Count; idsDept++)
      {

          string mainId = dsDept.Tables[0].Rows[idsDept]["id"].ToString();
          string mainDept = dsDept.Tables[0].Rows[idsDept]["dept"].ToString();


          DataSet ds = new DataSet();
          ds = cls.ReturnDataSet("sp_users",
              new SqlParameter("@Field", "*"),
              new SqlParameter("@TblNm", "Users"),
              new SqlParameter("@Where", "where mainid = '" + mainId + "' "));

        for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
        {
            dt.Rows.Add(ds.Tables[0].Rows[i]["value"].ToString(), ds.Tables[0].Rows[i]["notification_time"].ToString());

        }
    }

        UserContainer cont = new UserContainer ();
        cont.usersdetails = dt;

使用上面的代码我得到的输出如下所示,根据我的输出预期不合适。

{
    "userData": [
        {
            "id": "2",
            "name": "asdasd"
        },
        {
            "id": "3",
            "name": "wew"
        },
        {
            "id": "4",
            "name": "qqqq"
        }
    ]
}

但是上面的代码并没有像我想要的那样生成相同的JSON。

我如何生成这种类型的JSON?

1 个答案:

答案 0 :(得分:2)

使用http://json2csharp.com/我得到了课程

public class UserData
{
    public string id { get; set; }
    public string name { get; set; }
}

public class User
{
    public List<UserData> userData { get; set; }
    public string MainId { get; set; }
    public string MainDept { get; set; }
}

public class RootObject
{
    public List<User> Users { get; set; }
}

注意,您不能在属性名称中包含空格。

只需填充RootObject并使用JSON.Net对其进行血清化。我不明白你为什么要使用DataTable / DataSet来做任何事情,除非通过ADO.Net传递表值参数。

如果您不是一种简单而快速的方法从支持SQL的数据库填充这些对象,我会考虑Dapper