转换数据表嵌套JSON在C#
我想数据表转换成嵌套的JSON,但得到以下错误:转换数据表嵌套JSON在C#
"An item with the same key has already been added."
数据
CstCmpCode Main_Group Sub_Group ClosBal
AH01 Neck Wraps AFGHANI 7
现在我想JSON结果是这样的:
{
"CstCmpCode": "AH01",
"Main_Group": "Neck Wraps",
"sub_group": [
{
"Sub_Group": "AFGHANI",
"ClosBal": 7
}
]
}
我用下面的代码:
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();
var main = new Dictionary<string, Dictionary<string, string>>();
foreach (DataRow rs in dt.Rows)
{
string Main_Group = rs["Main_Group"].ToString();
Dictionary<string, string> sub;
if (!main.TryGetValue(Main_Group, out sub))
{
sub = new Dictionary<string, string>();
main.Add(Main_Group, sub);
}
sub.Add(rs["Sub_Group"].ToString(), (string)rs["ClosBal"]);
}
RootObject root = new RootObject { main = main };
public class RootObject
{
[JsonProperty("main")]
public Dictionary<string, Dictionary<string, string>> main { get; set; }
}
在你的代码在这里:
string Main_Group = rs["Main_Group"].ToString();
Dictionary<string, string> sub;
if (!main.TryGetValue(Main_Group, out sub))
{
sub = new Dictionary<string, string>();
main.Add(Main_Group, sub);
}
sub.Add(rs["Sub_Group"].ToString(), (string)rs["ClosBal"]);
^^^^^^^
我认为问题就在这里 - 你添加到sub
字典rs["Sub_Group"]
没有如果存在检查。所以如果你有相同的Sum_Group
两倍于Main_group
的值,它会抛出你得到的异常。
是从这里它显示消息 –
@YogeshSharma - 这是否帮助你解决你的问题? –
是的,自从最近两天我面临这个问题,这是我的新... –
请说明问题 –
是什么问题显示为“具有相同密钥的项目已被添加”。 –
并且我想将我的数据表转换为嵌套的Json字符串,所以我可以像上面的json输出一样序列化json字符串。 –