【问题标题】:Converting Excel to JSON using c# dictionary使用 c# 字典将 Excel 转换为 JSON
【发布时间】:2018-03-08 12:42:59
【问题描述】:

我正在使用此代码将 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;

                }
            }
        }
    }
}

要求是我需要在 JSON 中创建子序列化对象。例如,如果一个单元格有一个值: "name": "abc,def",输出必须是:

"name":
{
 "name1": "abc",
 "name2": "def"
}

如何修改我的代码来实现这一点?

【问题讨论】:

  • 请将代码发布为文本而不是图像。
  • 请在此处以文本格式提供您的代码。
  • 提供处理“name”的代码:{“name1”:“abc”,“name2”:“def”}这部分
  • @MihirDave 这个链接能帮上忙吗?
  • 不,在这里发布代码。 @CVKASHYAP

标签: c# excel dictionary json.net


【解决方案1】:

试试这个代码,希望对你有帮助

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

【讨论】:

  • 得到以下错误: 错误 CS1929 'object' 不包含 'Contains' 的定义和最佳扩展方法重载 'Queryable.Contains(IQueryable, string)' 需要类型为 'IQueryable' ConsoleApplication1 的接收器
  • 如果您遇到任何其他错误,请提供示例 xlsx 文件,以便我可以帮助您。
  • 感谢您的更新。此代码有效,但不是预期的格式。我的预期格式如下。如果 name 中的值是 abc,def,则输出必须是 name: { name1:abc,name2:def} 但我得到根据您提供的代码,输出为 name1:abc,name2:def
  • @CVKASHYAP 请检查新的编辑希望新的编辑会给你预期的输出。
  • 很高兴它有帮助,如果有帮助请接受答案。
猜你喜欢
  • 1970-01-01
  • 2015-03-19
  • 2011-12-18
  • 2015-05-31
  • 1970-01-01
  • 2018-07-04
  • 2014-12-31
  • 1970-01-01
相关资源
最近更新 更多