โอเคในที่สุดฉันก็แก้ปัญหาได้ หากมีวิธีที่ดีกว่าโปรดแจ้งให้เราทราบ :-)
public DataSet getData(string strFoo)
{
string url = "foo";
HttpClient client = new HttpClient();
HttpResponseMessage response;
DataSet dsTable = new DataSet();
try
{
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
response = client.GetAsync(url).Result;
string responseJSONContent = response.Content.ReadAsStringAsync().Result;
var jsonList = DeSerializeJsonString(responseJSONContent);
dsTable = Foo_ConnectAPI.ExtentsionHelpers.ToDataSet<RootObject>(jsonList);
return dsTable;
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
return null;
}
}
public List<RootObject> DeSerializeJsonString(string jsonString)
{
List<RootObject> list = new List<RootObject>();
list = (List<RootObject>)JsonConvert.DeserializeObject<List<RootObject>>(jsonString);
return list;
}
RootObject มี get set ที่จะรับค่าของ JSON
public class RootObject
{
public string EntityID { get; set; }
public string Address1 { get; set; }
public string Address2 { get; set; }
public string Address3 { get; set; }
}
วิธีที่ง่ายที่สุดในการสร้างคลาสด้านบนคือการใช้json2charpซึ่งจะจัดรูปแบบตามนั้นและยังระบุประเภทข้อมูลที่ถูกต้อง
ต่อไปนี้มาจากคำตอบอื่นในStackoverflow
อีกครั้งโดยไม่คำนึงถึง JSON ที่ซ้อนกัน
internal static class ExtentsionHelpers
{
public static DataSet ToDataSet<T>(this List<RootObject> list)
{
try
{
Type elementType = typeof(RootObject);
DataSet ds = new DataSet();
DataTable t = new DataTable();
ds.Tables.Add(t);
try
{
foreach (var propInfo in elementType.GetProperties())
{
try
{
Type ColType = Nullable.GetUnderlyingType(propInfo.PropertyType) ?? propInfo.PropertyType;
t.Columns.Add(propInfo.Name, ColType);
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
}
}
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
}
try
{
foreach (RootObject item in list)
{
DataRow row = t.NewRow();
foreach (var propInfo in elementType.GetProperties())
{
row[propInfo.Name] = propInfo.GetValue(item, null) ?? DBNull.Value;
}
t.Rows.Add(row);
}
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
}
insert.insertCategories(t);
return ds.
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
return null;
}
}
};
จากนั้นในที่สุดเพื่อแทรกชุดข้อมูลด้านบนลงในตารางที่มีคอลัมน์ที่แมปกับ JSON ฉันใช้ SQL จำนวนมากคัดลอกและคลาสต่อไปนี้
public class insert
{
public static string insertCategories(DataTable table)
{
SqlConnection objConnection = new SqlConnection();
objConnection.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["foo"].ToString();
try
{
objConnection.Open();
var bulkCopy = new SqlBulkCopy(objConnection.ConnectionString);
bulkCopy.DestinationTableName = "dbo.foo";
bulkCopy.BulkCopyTimeout = 600;
bulkCopy.WriteToServer(table);
return "";
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
return "";
}
finally
{
objConnection.Close();
}
}
};
ดังนั้นข้างต้นจึงทำงานเพื่อแทรก JSON จาก webAPI ลงในฐานข้อมูล นี่คือสิ่งที่ฉันได้รับในการทำงาน แต่ฉันไม่คาดหวังว่ามันจะสมบูรณ์แบบ หากคุณมีการปรับปรุงใด ๆ โปรดอัปเดตตามนั้น