2016-08-16 118 views
0

我想數據錶轉換成嵌套的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; } 
} 
+0

請說明問題 –

+0

是什麼問題顯示爲「具有相同密鑰的項目已被添加」。 –

+0

並且我想將我的數據錶轉換爲嵌套的Json字符串,所以我可以像上面的json輸出一樣序列化json字符串。 –

回答

0

在你的代碼在這裏:

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的值,它會拋出你得到的異常。

+0

是從這裏它顯示消息 –

+0

@YogeshSharma - 這是否幫助你解決你的問題? –

+0

是的,自從最近兩天我面臨這個問題,這是我的新... –