【问题标题】:Creating json array in C# by fetching data from csv通过从 csv 获取数据在 C# 中创建 json 数组
【发布时间】:2021-06-05 06:32:41
【问题描述】:

我想使用 C# 创建以下 json。所有数据都是从 csv 文件中提取的。

{
    "car":[
        {
            "manufacturer": "Nissan",
            "fuelType": "petrol",
            "mileage": 20
        },
        {
            "manufacturer": "Nissan",
            "fuelType": "diesel",
            "mileage": 20

        },
        {
            "manufacturer": "Tesla",
            "fuelType": "electric",
            "mileage": 240
        },
        {
            "manufacturer": "Honda",
            "fuelType": "hybrid",
            "mileage": 100
        }
    ]
}

以下是我编写的 C# 代码以及运行代码时得到的输出。我希望汽车是一个对象数组,而不是我得到一个包含单个汽车数组的汽车对象数组。我是 C# 和 json 的新手。

namespace createJSONfromCSV
{
    class Program
    {
        static void Main(string[] args)
        {
            string Path = @"C:\Files\CarDetails.csv";
            List<string> csvData = new List<string>();
            List<carDetails> carlist = new List<carDetails>();

            StreamReader reader = null;

            if (File.Exists(Path))
            {
                reader = new StreamReader(File.OpenRead(Path));
                while (!reader.EndOfStream)
                {
                    string line = reader.ReadLine();
                    csvData.Add(line);
                }

                foreach(var item in csvData)
                {
                    if(item != csvData[0])
                    {
                        string[] fields = item.Split(',');
                        carlist.Add(new carDetails()
                        {
                            cars = new List<car>()
                            {
                                new car()
                                {
                                    manufacturer = fields[0],
                                    fuelType = fields[1],
                                    mileage = Convert.ToInt32(fields[2])
                                }
                            }
                        });
                    }
                }
                var carDetailsjson = JsonConvert.SerializeObject(carlist, Formatting.Indented);
                Console.WriteLine(carDetailsjson);
            }
            else
            {
                Console.WriteLine("File does not exist...");
            }
        }
    }
}


class carDetails
    {
        public List<car> cars { get; set; }
    }

    class car
    {
        public string manufacturer {get; set;}
        public string fuelType { get; set; }
        public int mileage { get; set; }
    }

我得到的输出如下:

[
    {
      "cars": [
        {
          "manufacturer": "Nissan",
          "fuelType": "Petrol",
          "mileage": 20
        }
      ]
    },
    {
      "cars": [
        {
          "manufacturer": "Nissan",
          "fuelType": "Diesel",
          "mileage": 60
        }
      ]
    },
    {
      "cars": [
        {
          "manufacturer": "Tesla",
          "fuelType": "Electric",
          "mileage": 240
        }
      ]
    },
    {
      "cars": [
        {
          "manufacturer": "Honda",
          "fuelType": "Hybrid",
          "mileage": 100
        }
      ]
    }
  ]

【问题讨论】:

  • 列出一份汽车清单。不是每一行的列表。

标签: c# arrays json


【解决方案1】:

您应该在 foreach 条件下将 Car 对象添加到列表中,而不是仅具有 List 属性的 carDetails 对象。所以你的代码应该是这样的;

            List<car> carlist = new List<car>();
  carlist.Add(new car()
                                                         {
                                    manufacturer = fields[0],
                                    fuelType = fields[1],
                                    mileage = Convert.ToInt32(fields[2])
                                });

【讨论】:

    【解决方案2】:

    只需建立一个汽车列表。在 foreach 中,您只需将汽车对象添加到列表中:

    var cars = new List<car>();
    
    foreach(var item in csvData)
    {
         if(item != csvData[0])
         {
               string[] fields = item.Split(',');
    
               cars.Add(new car()
               {
                    manufacturer = fields[0],
                    fuelType = fields[1],
                    mileage = Convert.ToInt32(fields[2])
               });
         }
    }
    
    var carDetailsjson = JsonConvert.SerializeObject(new carDetails() { cars = cars }, Formatting.Indented);
    

    【讨论】:

      猜你喜欢
      • 2013-01-22
      • 2022-11-03
      • 1970-01-01
      • 2020-12-09
      • 2020-01-24
      • 2017-01-07
      • 2018-01-12
      • 2014-12-16
      • 1970-01-01
      相关资源
      最近更新 更多