在C#中使用嵌套数组反序列化JSON时遇到问题

时间:2016-08-13 08:15:36

标签: c# json web-services serialization

我在这里尝试反序列化这个JSON时遇到了麻烦:

{
  "CstCmpCode": "AH01",
  "Loaded_date": "13-Aug-2016",
  "Main_Group": "Neck Wraps",
  "sub_group": [
    {
      "Sub_Group": "AFGHANI",
      "ClosBal": 7
    },
    {
      "Sub_Group": "AFGHANI",
      "ClosBal": 13
    },
    {
      "Sub_Group": "AFGHANI",
      "ClosBal": -15
    }
  ]
}

我为此创建的代码是:

public void TempStock(string CstCmpCode)
{
    try
    {
        System.Web.Script.Serialization.JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer();

        SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["TallyWeb"].ToString());
        SqlCommand cmd = new SqlCommand();
        cmd.CommandText = "select CstCmpCode, Loaded_date, Main_Group, Sub_Group, ClosBal from TlyStkSumm where CstCmpCode = @CstCmpCode";
        cmd.Parameters.AddWithValue("@CstCmpCode", CstCmpCode);
        DataSet ds = new DataSet();
        DataTable dt = new DataTable();
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        da.SelectCommand.Connection = con;
        da.Fill(dt);
        con.Close();

        List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>();
        Dictionary<string, object> row = null;
        foreach (DataRow rs in dt.Rows)
        {
            row = new Dictionary<string, object>();
            foreach (DataColumn col in dt.Columns)
            {
                row.Add(col.ColumnName, rs[col]);
            }
            rows.Add(row);
        }

        this.Context.Response.ContentType = "application/json; charset=utf-8";
        //this.Context.Response.Write(serializer.Serialize(rows));
        string json;
        json = JsonConvert.SerializeObject(rows);
        //////JsonTest jobj2 = JsonConvert.DeserializeObject<JsonTest>(json);
        ////var objResponse1 = JsonConvert.DeserializeObject<List<JsonTest>>(json);
        //JavaScriptSerializer oJS = new JavaScriptSerializer();
        //////testobject objtec = new testobject();
        ////objtec = oJS.Deserialize<testobject>(json);
        ////objtec = oJS.Deserialize<List<testobject>>(json);
        ////var s = new JavaScriptSerializer();
        ////var t = s.Deserialize<List<JsonTest>>(json);
        //var jobj2 = new JavaScriptSerializer().Deserialize<List<JsonTest>>(json);
        //var test = JsonConvert.DeserializeObject<List<JsonTest>>(json);
        var myObj = JsonConvert.DeserializeObject<List<MyClass>>(json);
        //MyClass c = serializer.Deserialize<MyClass>(json);
    }
    catch (Exception ex)
    {
        System.Web.Script.Serialization.JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer();

        this.Context.Response.ContentType = "application/json; charset=utf-8";
        this.Context.Response.Write(serializer.Serialize(ex.Message));
    }
}

public class JsonTest
    {
        public string CstCmpCode { get; set; }
        public string Loaded_date { get; set; }
        public string Main_Group { get; set; }
        //public sub_group[] s;
        public List<sub_group> sub { get; set; }
    }
 public class sub_group
    {
        public string Sub_Group { get; set; }
        //public string ClosBal { get; set; }
    }

PLS。告诉我哪里出错了

1 个答案:

答案 0 :(得分:0)

将Newtonsoft.Json nuget包下载到您的项目并使用此代码

这是你的模特

public class MyClass
{
    public string CstCmpCode { get; set; }
    public string Loaded_date { get; set; }
    public string Main_Group { get; set; }
    public Result[] results { get; set; }
}

public class Result
{
    public string Sub_Group { get; set; }
    public int ClosBal { get; set; }
}

您可以像这样反序列化字符串

var myObj= JsonConvert.DeserializeObject<MyClass>(json)