Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用c#字典将Excel转换为JSON_C#_Excel_Dictionary_Json.net - Fatal编程技术网

使用c#字典将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

我使用此代码将Excel文件转换为JSON格式

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");
    }
}