【问题标题】:Having Trouble in Deserializing JSON with nested arrays in C#在 C# 中使用嵌套数组反序列化 JSON 时遇到问题
【发布时间】:2016-08-13 08:15:35
【问题描述】:

我在这里尝试反序列化此 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; }
    }

请。告诉我哪里出错了

【问题讨论】:

  • 您可以直接从 JSON 构建类结构。在stackoverflow.com/a/38161247/1744164查看我的回答
  • 您当前的代码未编译。 MyClass 在哪里定义?请在有关内容和格式的问题上多加努力。
  • @SirRufo 请。检查 TempStock(string CstCmpCode) 方法
  • @SirRufo 请。帮帮我,这对我来说非常必要
  • 感谢您的回复..我完全走错了路,首先我必须将我的 DataTable 转换为嵌套的 json 字符串,然后我必须对它们进行反序列化。

标签: c# json web-services serialization


【解决方案1】:

将 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)

【讨论】:

  • @YogeshSharma 然后做剩下的 :) 你的模型格式错误,我没有看到你使用 JsonConvert 的行
  • 在我的模型问题或我的网络服务中??
  • @YogeshSharma 首先在您的模型中,您有一个子列表,但在您的 json 中它被称为结果。
  • 然后你有 json = JsonConvert.SerializeObject(rows);用于序列化但新的 JavaScriptSerializer().Deserialize.. 用于反序列化。发生了什么事?
  • @YogeshSharma 用我的模型替换你的模型并再次测试。然后回来
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-10
  • 1970-01-01
  • 1970-01-01
  • 2019-09-22
  • 1970-01-01
相关资源
最近更新 更多