Seems, you are using
Json.NET[
^] library...
So, you have to do something like this:
JObject jo = JObject.Parse(json);
JToken m = jo["master"];
StringBuilder sb = new StringBuilder();
string s = string.Format("INSERT INTO {0} ", m["table"]);
sb.Append(s);
sb.Append("(");
foreach(JProperty jp in m["keys"])
sb.Append(string.Format("{0},", jp.Name));
foreach(JProperty jp in m["fields"])
sb.Append(string.Format("{0},", jp.Name));
sb.Append(@") Values(");
foreach(JToken jt in m["keys"])
sb.Append(string.Format("{0},", jt.First));
foreach(JToken jt in m["fields"])
sb.Append(string.Format("'{0}',", jt.First));
sb.Append(")");
s = sb.ToString();
s= s.Replace(",)", ")");
Result:
INSERT INTO master_table (id,branch_id,name,address,phone) Values(1,1,'bar','fleet street','555')
Note: you should rather use
parameterized queries[
^] instead of concatenated strings to avoid
SQL Injection[
^] . So, your command should take such of form:
INSERT INTO table_name (<field_list>) VALUES (<parameters_list>)
Then, you have to add parameter into
ParameterCollection
.
See:
SqlParameterCollection Class (System.Data.SqlClient) | Microsoft Docs[
^]
OleDbParameterCollection Class (System.Data.OleDb) | Microsoft Docs[
^]
[EDIT #1]
Finally, i'd suggest to create helper class:
public static class JsonHelper
{
public static string GetInsertStatement(JToken mastertoken)
{
return string.Format("INSERT INTO {0}({1}) VALUES({2});",
mastertoken["table"],
GetFieldParameterNames(mastertoken),
GetFieldParameterNames(mastertoken, false));
}
static string GetFieldParameterNames(JToken mastertoken, bool fieldOnly = true)
{
string p = fieldOnly ? string.Empty : "@";
return string.Concat(string.Join(", ", mastertoken["keys"].Cast<JProperty>().Select(jp=> p + jp.Name)),
", ", string.Join(", ", mastertoken["fields"].Cast<JProperty>().Select(jp=> p + jp.Name)));
}
public static List<SqlParameter> GetSqlParams(JToken mastertoken)
{
List<SqlParameter> para = new List<SqlParameter>();
foreach(JToken jt in mastertoken["keys"])
para.Add(new SqlParameter("@" + jt.ToObject<JProperty>().Name, jt.First));
foreach(JToken jt in mastertoken["fields"])
para.Add(new SqlParameter("@" + jt.ToObject<JProperty>().Name, jt.First));
return para;
}
}
Usage:
JObject jo = JObject.Parse(json);
JToken m = jo["master"];
string connectionstring = "Server=myServerAddress;Database=myDataBase;User Id=myUsernamePassword=myPassword;";
using(SqlConnection connection = new SqlConnection(connectionstring))
{
using(SqlCommand command = new SqlCommand(JsonHelper.GetInsertStatement(m), connection))
{
List<SqlParameter> lsp = JsonHelper.GetSqlParams(jo["master"]);
foreach(SqlParameter sqp in lsp)
command.Parameters.Add(sqp);
}
}
Final note: This is not an elegant solution, but an idea to improve.