C# 使用JavaScriptSerializer将csv转换为JSON

C# 使用JavaScriptSerializer将csv转换为JSON,c#,json,C#,Json,我使用以下代码通过C#将csv转换为json: 我希望输出的格式如下: [{ "Type" : "1", "Id" : "2", "Name" : "3", "Age" : "4", "Org" : "5", "Dob" : "6", , "FirstName" : "7", "LastName" : "8", "Flight" : "9", }

我使用以下代码通过C#将csv转换为json:

我希望输出的格式如下:

[{
        "Type" : "1",
        "Id" : "2",
        "Name" : "3",
        "Age" : "4",
        "Org" : "5",
        "Dob" : "6", ,
        "FirstName" : "7",
        "LastName" : "8",
        "Flight" : "9",
    }, {
        "Type" : "1",
        "Id" : "2",
        "Name" : "3",
        "Age" : "4",
        "Org" : "5",
        "Dob" : "6", ,
        "FirstName" : "7",
        "LastName" : "8",
        "Flight" : "9",
    }
]

你知道为什么它不起作用吗

代码产生的输出是预期的输出。您必须将数据转换为所需的格式。下面是一个如何执行此操作的示例:

static void Main(string[] args)
{
    var lines = @"A,B,C
1,2,3
4,5,6".Replace("\r", "").Split('\n');

    var csv = lines.Select(l => l.Split(',')).ToList();

    var headers = csv[0];
    var dicts = csv.Skip(1).Select(row => Enumerable.Zip(headers, row, Tuple.Create).ToDictionary(p => p.Item1, p => p.Item2)).ToArray();

    string json = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(dicts);
    Console.WriteLine(json);
}

代码产生的输出是预期的输出。您必须将数据转换为所需的格式。下面是一个如何执行此操作的示例:

static void Main(string[] args)
{
    var lines = @"A,B,C
1,2,3
4,5,6".Replace("\r", "").Split('\n');

    var csv = lines.Select(l => l.Split(',')).ToList();

    var headers = csv[0];
    var dicts = csv.Skip(1).Select(row => Enumerable.Zip(headers, row, Tuple.Create).ToDictionary(p => p.Item1, p => p.Item2)).ToArray();

    string json = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(dicts);
    Console.WriteLine(json);
}

json不是无效的,只是不是您期望的格式,这正是您输入序列化程序的格式。你只是将csv加载到一个字符串矩阵中,并直接序列化它,从未从itI中生成对象。我投票将这个问题作为离题题来结束,因为事情的表现与它们应该的完全一样。csv文件的结构不是你期望的格式。请显示文件数据的一部分。json不是无效的,只是不是您期望的格式,这正是您输入序列化程序的格式。你只是将csv加载到一个字符串矩阵中,并直接序列化它,从未从itI中生成对象。我投票将这个问题作为离题题来结束,因为事情的表现与它们应该的完全一样。csv文件的结构不是你期望的格式。请显示您的部分文件数据。很抱歉,我周末没空,直到现在才回来。为这个问题道歉我显然很懒,没有正确地阅读它。但这非常有效,对我帮助很大。我正在从文件中读取,所以我没有使用您的“var lines=@”A、B、C….”,而是使用了:“var linesCSV=System.IO.file.ReadAllLines(targetFile);”“其中targetFile是我的csv的名称。然后我使用linesCSV而不是lines。如果你能解释一下dicts的线路在做什么?有些是不言自明的,但有些不是。谢谢again@thatOneGuy它基本上只是从csv的行创建一个字典数组,其中键是第一行中的值,值是与键位于同一列的当前行中的值。然后json序列化程序将字典序列化为默认的json对象。System.Web.Script的名称空间是:System.Web.ExtensionSorry我周末很忙,直到现在才回来。为这个问题道歉我显然很懒,没有正确地阅读它。但这非常有效,对我帮助很大。我正在从文件中读取,所以我没有使用您的“var lines=@”A、B、C….”,而是使用了:“var linesCSV=System.IO.file.ReadAllLines(targetFile);”“其中targetFile是我的csv的名称。然后我使用linesCSV而不是lines。如果你能解释一下dicts的线路在做什么?有些是不言自明的,但有些不是。谢谢again@thatOneGuy它基本上只是从csv的行创建一个字典数组,其中键是第一行中的值,值是与键位于同一列的当前行中的值。然后json序列化程序将字典序列化为默认的json对象。System.Web.Script的命名空间为:System.Web.Extension
static void Main(string[] args)
{
    var lines = @"A,B,C
1,2,3
4,5,6".Replace("\r", "").Split('\n');

    var csv = lines.Select(l => l.Split(',')).ToList();

    var headers = csv[0];
    var dicts = csv.Skip(1).Select(row => Enumerable.Zip(headers, row, Tuple.Create).ToDictionary(p => p.Item1, p => p.Item2)).ToArray();

    string json = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(dicts);
    Console.WriteLine(json);
}