无法将类型为“Newtonsoft.Json.Linq.JObject”的对象转换为类型“System.Collections.Generic.Dictionary`2[System.String,S
Posted
技术标签:
【中文标题】无法将类型为“Newtonsoft.Json.Linq.JObject”的对象转换为类型“System.Collections.Generic.Dictionary`2[System.String,System.Object]”【英文标题】:Unable to cast object of type 'Newtonsoft.Json.Linq.JObject' to type 'System.Collections.Generic.Dictionary`2[System.String,System.Object]' 【发布时间】:2020-03-17 00:52:24 【问题描述】:我正在尝试使用 SqlBulkCopy 将对象列表插入到表中。当代码命中时
var columnNames = ((Dictionary<string, object>)bData[0]).Select(x => x.Key).ToList();'
我明白了:
'无法将'Newtonsoft.Json.Linq.JObject'类型的对象转换为 类型 'System.Collections.Generic.Dictionary`2[System.String,System.Object]'' 错误。
你能帮帮我吗?
public Int64 PostBulkMessage(List<object> bData)
DataTable dt = new DataTable();
var columnNames = ((Dictionary<string, object>)bData[0]).Select(x => x.Key).ToList();
for (int i = 0; i < columnNames.Count(); i++)
dt.Columns.Add(columnNames[i]);
foreach (Dictionary<string, object> customer in bData)
DataRow dr = dt.NewRow();
for (int i = 0; i < columnNames.Count(); i++)
dr[columnNames[i]] = customer[columnNames[i]];
dt.Rows.Add(dr);
if (dt.Rows.Count > 0)
string consString = ConfigurationManager.ConnectionStrings["ConnEntities"].ConnectionString;
using (SqlConnection con = new SqlConnection(consString))
using (SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(con))
//Set the database table name.
sqlBulkCopy.DestinationTableName = "dbo.BulkSent";
con.Open();
sqlBulkCopy.WriteToServer(dt);
con.Close();
return 0;
【问题讨论】:
你看过ToDictionary()
吗? docs.microsoft.com/en-us/dotnet/api/…
是 Stefan ,方法 'ToDictionary' 没有重载需要 0 个参数。
你看过如何使用ToDictionary
的例子吗?
我认为你的行应该是这样的:var columnNames = bData.ToDictionary(x => x.Key);
var columnNames = bData.ToDictionary(x => x.Key);我试过了,但得到错误'对象不包含键的定义'。我也试过 ToDictionary(x => x, x => true) ,仍然得到同样的错误
【参考方案1】:
非常感谢 Stefan 和 Rahul Sharma 的支持。按照 Stefan 的建议,我创建了课程并更改了代码。现在批量插入工作正常。请验证以下代码。
public Int64 PostBulkMessage(List<Bulk> bData)
DataTable dt = new DataTable();
dt.Columns.Add("Id", typeof(string));
dt.Columns.Add("Mobile", typeof(string));
dt.Columns.Add("MessageContent", typeof(string));
for (int i = 0; i < bData.Count(); i++)
DataRow dr = dt.NewRow();
dr[0] = bData[i].Id;
dr[1] = bData[i].Mobile;
dr[2] = bData[i].MessageContent;
dt.Rows.Add(dr);
if (dt.Rows.Count > 0)
string connectionString = ConfigurationManager.ConnectionStrings["ConnEntities"].ConnectionString;
if (connectionString.ToLower().StartsWith("metadata="))
System.Data.Entity.Core.EntityClient.EntityConnectionStringBuilder efBuilder = new System.Data.Entity.Core.EntityClient.EntityConnectionStringBuilder(connectionString);
connectionString = efBuilder.ProviderConnectionString;
using (SqlConnection con = new SqlConnection(connectionString))
using (SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(con))
sqlBulkCopy.DestinationTableName = "dbo.BulkMsg";
con.Open();
sqlBulkCopy.WriteToServer(dt);
con.Close();
return 0;
public class Bulk
public string Id get; set;
public string Mobile get; set;
public string MessageContent get; set;
【讨论】:
以上是关于无法将类型为“Newtonsoft.Json.Linq.JObject”的对象转换为类型“System.Collections.Generic.Dictionary`2[System.String,S的主要内容,如果未能解决你的问题,请参考以下文章
C# 无法将类型为“System.Byte[]”的对象强制转换为类型“System.Data.DataTable
无法将 [Struct] 类型的值快速转换为 [string] 类型
无法将类型为“Microsoft.Office.Interop.Word.ApplicationClass”的 COM 对象强制转换为接口类型“Micro