Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.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# 如何在没有循环的情况下将CSV字符串转换为json(或转换为c对象列表)?使用.NET Framework或.NET Core_C#_.net_Json_Asp.net Core - Fatal编程技术网

C# 如何在没有循环的情况下将CSV字符串转换为json(或转换为c对象列表)?使用.NET Framework或.NET Core

C# 如何在没有循环的情况下将CSV字符串转换为json(或转换为c对象列表)?使用.NET Framework或.NET Core,c#,.net,json,asp.net-core,C#,.net,Json,Asp.net Core,语言:C# .NET Framework 4.7或.NET Core 我想知道有没有有效的方法将普通字符串转换为JSON(或C#对象列表)?下面是我的字符串: "Product","Date","Expiry","Type","Price":"ABC","20-Jul-2019","20-Jul-2022","Supplemen

语言:C#

.NET Framework 4.7或.NET Core

我想知道有没有有效的方法将普通字符串转换为JSON(或C#对象列表)?下面是我的字符串:

"Product","Date","Expiry","Type","Price":"ABC","20-Jul-2019","20-Jul-2022","Supplement","1300":"XYZ","20-Jul-2019","20-Jul-2022","Supplement","100":"AAA","20-Jul-2019","20-Jul-2022","Supplement","200":"XXX","20-Jul-2019","20-Jul-2022","Supplement","500"
如果您注意到,每一行都用冒号分隔(

我可以通过像split(“:”)这样迭代每一行,然后创建DataTable,然后将其序列化为JSON来实现,但我想知道有没有有效的方法来避免循环并提高性能


更新 到目前为止,我已经通过使用下文实现了上述目标。它工作得很好,但我正在寻找某种方法来避免循环

private static DataTable createDataTable(string[] csvArray)
    {
        DataTable dtCSV = new DataTable();
        int idx = 0;
        foreach (var str in csvArray)
        {
            var valueArray = str.Split(',');
            if (idx == 0)
            {
                for (int i = 0; i < valueArray.Length; i++)
                {
                    dtCSV.Columns.Add(valueArray[i].Replace("\"", ""), typeof(String));
                }
                idx++;

            }
            else
            {
                DataRow dr;
                dr = dtCSV.NewRow();
                for (int i = 0; i < valueArray.Length; i++)
                {
                    dr[i] = valueArray[i].Replace("\"","");
                }
                dtCSV.Rows.Add(dr);

            }
        }
        return dtCSV;

    }

使用JQuery将上述内容添加到锚定标记的href中。它以CSV格式导出数据。但我不想导出它,我想将它保存到数据库中。

首先必须更正字符串。 类似于{“产品”:“ABC”,“日期”:“2019年7月20日”…}

然后


请先输入字符串而不是StringData,您必须更正字符串。 类似于{“产品”:“ABC”,“日期”:“2019年7月20日”…}

然后

把你的字符串而不是StringData放进去,这很简单 像这样:

string str=“{\'name\':\'your name value\',\'age\':26}”

var jv=JsonValue.Parse(str)

这很简单 像这样:

string str=“{\'name\':\'your name value\',\'age\':26}”


var jv=JsonValue.Parse(str)

这可以使用LINQ和Json.Net完成(但仍将在内部执行循环):


这可以使用LINQ和Json.Net完成(但仍将在内部执行循环):


打字错误警报:补充-非“补充”(
e
-非
i
-在
l
之后)@Cid更新了问题。它工作正常,但我想避免循环,因为字符串可能非常大。您必须解析字符串。解析是通过逐字符检查字符来完成的,因此您将迭代每个字符。迭代是通过一种循环来完成的。避免循环就是避免解析就是避免完成作业。是否可以将“:”符号更改为数据中的换行符?如果是,您可以使用CsvHelper将其映射到具有几行的对象“到目前为止,我已经通过使用下面的代码实现了上面的功能。它工作正常,但我正在寻找某种方法来避免循环”这个问题可能适合而不是SOTypo alert:supplement-而不是“supplement”(
e
-not
I
-在
l
之后)@Cid更新了问题。它工作正常,但我想避免循环,因为字符串可能非常大。您必须解析字符串。解析是通过逐字符检查字符来完成的,因此您将迭代每个字符。迭代是通过一种循环来完成的。避免循环就是避免解析就是避免完成作业。是否可以将“:”符号更改为数据中的换行符?如果是,您可以使用CsvHelper将其映射到具有几行的对象“到目前为止,我已通过使用下面的方法实现了上面的功能。它工作正常,但我正在寻找某种方法来避免循环”这个问题可能适合,而不是因为它很简单,但我的字符串不是上面的格式。这真是一条普通的线。我已经用当前的实现更新了这个问题。它很简单,但我的字符串不是上面的格式。这真是一条普通的线。我已经用当前的实现更新了这个问题。它很简单,但我的字符串不是上面的格式。这真是一条普通的线。我已经用当前的实现更新了这个问题。它很简单,但我的字符串不是上面的格式。这真是一条普通的线。我已经用当前的实现更新了这个问题。是的,它将在内部使用循环,但看起来很干净。谢天谢地,它将在内部使用循环,但看起来很干净。谢谢
var csv = 'data:application/csv;charset=utf-8,' + encodeURIComponent(myString);
 return Json(new
            {
                data = "YourStringData",
            });
using Newtonsoft.Json;
using System.Linq;

// -----------

var data = "\"Product\",\"Date\",\"Expiry\",\"Type\",\"Price\":\"ABC\",\"20-Jul-2019\",\"20-Jul-2022\",\"Supplement\",\"1300\":\"XYZ\",\"20-Jul-2019\",\"20-Jul-2022\",\"Supplement\",\"100\":\"AAA\",\"20-Jul-2019\",\"20-Jul-2022\",\"Supplement\",\"200\":\"XXX\",\"20-Jul-2019\",\"20-Jul-2022\",\"Supplement\",\"500\"";
var datas = data.Split(':'); // string[] containing each line of the CSV
var MemberNames = datas[0].Split(','); // the first line, that contains the member names
var MYObj = datas.Skip(1) // don't take the first line (member names)
                 .Select((x) => x.Split(',') // split columns
                                 /*
                                  * create an anonymous collection
                                  * with object having 2 properties Key and Value
                                  * (and removes the unneeded ")
                                  */
                                 .Select((y, i) => new { Key = MemberNames[i].Trim('"'),
                                                         Value = y.Trim('"') })
                                 // convert it to a Dictionary
                                 .ToDictionary(d => d.Key, d => d.Value));

// MYObject is IEnumerable<Dictionary<string, string>>

// serialize (remove indented if needed)
var Json = JsonConvert.SerializeObject(MYObj, Formatting.Indented);
Debug.WriteLine(Json);
[
  {
    "Product": "ABC",
    "Date": "20-Jul-2019",
    "Expiry": "20-Jul-2022",
    "Type": "Supplement",
    "Price": "1300"
  },
  {
    "Product": "XYZ",
    "Date": "20-Jul-2019",
    "Expiry": "20-Jul-2022",
    "Type": "Supplement",
    "Price": "100"
  },
  {
    "Product": "AAA",
    "Date": "20-Jul-2019",
    "Expiry": "20-Jul-2022",
    "Type": "Supplement",
    "Price": "200"
  },
  {
    "Product": "XXX",
    "Date": "20-Jul-2019",
    "Expiry": "20-Jul-2022",
    "Type": "Supplement",
    "Price": "500"
  }
]