首页 > 解决方案 > C# 使用 JSON 进行序列化

问题描述

我有以下课程:

public class Employee 
{
    public string Name { get; set; }
    public int Age{ get; set; }

    public Employee(string name, int age)
     {
         Name = name;
         Age = age;
     }

     public override string ToString()
     {
         return string.Format("{0},{1}", Name, Age);
     } 
}

现在在另一个类中,我想编写一个 .json 文件来序列化 Employee 类

public class WriteFile
{
   public void WriteInFile(List<Employee> list)
   {
        string filePath="File.json";

        var serializer = JsonSerializer.Create();

         using (var w = new StreamWriter(filePath)
         {

            using (JsonTextWriter writer = new JsonTextWriter(w))
            {
                 foreach (Employee item in list)
                 {

                    string s = JsonConvert.SerializeObject(item, Formatting.Indented);
                    serializer.Serialize(writer, s);

                  }
             }

            w.Close();
         }
    }
}

在节目课

class Program
{

    private static void Main(string[] args)
    {

      List<Employee> listOfEmployees = new List<Employee>();
      listOfEmployees.Add(new Employee("Susan", 34 ));
      listOfEmployees.Add(new Employee("Jack", 50));
      listOfEmployees.Add(new Employee("Sally", 25));


      WriteFile write = new WriteFile();
      write.WriteInFile(listOfEmployees);

    }
}

输出是:

"{\r\n  \"Name\": \"Susan\",\r\n  \"Age\": 34\r\n}""{\r\n  \"Name\": \"Jack\",\r\n  \"Age\": 50\r\n}""{\r\n  \"Name\": \"Sally\",\r\n  \"Age\": 25\r\n}"

格式似乎无法正常工作。我想让每个名字和年龄都在一个新的行上,比如:

"Name": "Susan", "Age": 34 

等等。这可能吗?

标签: c#json

解决方案


JSON 仅支持一个顶级对象或数组。要序列化集合,请序列化集合本身。这将创建一个包含元素的有效 JSON 数组。

public void WriteInFile(IEnumerable<Employee> employees)
{
    var json = JsonConvert.SerializeObject(employees, Formatting.Indented);
    File.WriteAllText("employees.json", json);
}

来自 json.org 的 JSON 语法


推荐阅读