簡體   English   中英

C# 用 JSON 序列化

[英]C# Serialize with JSON

我有以下 class:

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

現在在另一個 class 我想寫一個.json 文件來序列化 class 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

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);

    }
}

output 是:

"{\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 

等等。 這可能嗎?

JSON 僅支持一個頂級 object 或陣列。 要序列化集合,請序列化集合本身。 這將創建一個包含元素的有效 JSON 數組。

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

JSON 語法來自 json.org

有可能的。 不再使用JsonSerializer再次寫入文件,append 將序列化字符串的內容寫入文本文件。

string output = "";
foreach (Employee item in list)
{

    string s = JsonConvert.SerializeObject(item, Formatting.Indented);
    output+= s+Environment.NewLine;
}

最后將 output 字符串寫入文件,不再使用 JsonSerializer

File.WriteAllText("output.json", output);

然后你會得到 output 文件,

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM