使用c#字典将Excel转换为JSON
我使用此代码将Excel文件转换为JSON格式使用c#字典将Excel转换为JSON,c#,excel,dictionary,json.net,C#,Excel,Dictionary,Json.net,我使用此代码将Excel文件转换为JSON格式 namespace ConsoleApplication1 { class Program { static void Main(string[] args) { var pathToExcel = @"D:\works\sample.xlsx"; var sheetName = "sa"; var connectionStrin
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
var pathToExcel = @"D:\works\sample.xlsx";
var sheetName = "sa";
var connectionString = String.Format(@"
Provider=Microsoft.ACE.OLEDB.12.0;
Data Source={0};
Extended Properties=""Excel 12.0 Xml;HDR=YES""
", pathToExcel);
using (var conn = new OleDbConnection(connectionString))
{
conn.Open();
var cmd = conn.CreateCommand();
cmd.CommandText = String.Format(
@"SELECT * FROM [{0}$]",
sheetName
);
using (var rdr = cmd.ExecuteReader())
{
var query =
(from DbDataRecord row in rdr
select row).Select(x =>
{
Dictionary<string, object> item = new
Dictionary<string, object>();
for(int i=0;i<20;i++)
{
item.Add(rdr.GetName(i), x[i]);
}
return item;
});
//Generates JSON from the LINQ query
var json = JsonConvert.SerializeObject(query);
var result = json;
Console.WriteLine(result);
//return json;
}
}
}
}
}
如何修改我的代码来实现这一点?试试这段代码,我希望这会对您有所帮助
//dynamic item = new ExpandoObject();
Dictionary<string, object> item = new Dictionary<string, object>();
for(int i=0;i<20;i++)
{
if(x[i].ToString().Contains(","))
{
Dictionary<string, object> temp = new Dictionary<string, object>()
string[] data = x[i].ToString().Split(',');
for(int j=0;j<data.Length;j++)
{
temp.Add(rdr.GetName(i)+j, data[j]);
}
item.Add(rdr.GetName(i), temp);
}
else
{
item.Add(rdr.GetName(i), x[i]);
Console.WriteLine("\n");
}
}
//动态项=新的ExpandoObject();
字典项=新字典();
对于(int i=0;i请将代码作为文本而不是图像发布。请在此处提供文本格式的代码。请在处理“名称”时提供代码:{“名称1”:“abc”,“名称2”:“def”}这part@MihirDave该链接是否有帮助?否,在此处发布代码。@CVKASHIAPG设置以下错误:错误CS1929'object'不包含'Contains'的定义,并且最佳扩展方法重载'Queryable.Contains(IQueryable,string)'需要'IQueryable'类型的接收器ConsoleApplication1如果您遇到任何其他错误,请提供示例xlsx文件,以便我可以帮助您。感谢您的更新。此代码正在工作,但不是预期的格式。我的预期格式如下。如果name中的值为abc,def,则输出必须为name:{name1:abc,name2:def}但根据您提供的代码,我得到的输出为name1:abc,name2:def。@CVKASHYAP请检查new edit希望new edit能按预期提供输出。很高兴它有帮助,如果有帮助,请接受答案。
//dynamic item = new ExpandoObject();
Dictionary<string, object> item = new Dictionary<string, object>();
for(int i=0;i<20;i++)
{
if(x[i].ToString().Contains(","))
{
Dictionary<string, object> temp = new Dictionary<string, object>()
string[] data = x[i].ToString().Split(',');
for(int j=0;j<data.Length;j++)
{
temp.Add(rdr.GetName(i)+j, data[j]);
}
item.Add(rdr.GetName(i), temp);
}
else
{
item.Add(rdr.GetName(i), x[i]);
Console.WriteLine("\n");
}
}