如何在不影响格式的情况下附加json文件

8 c# file-io json

我正在处理一个文件来添加/检索数据.数据格式是JSON.我是新手.我正在使用JSON.NET来序列化和反序列化数据.这是json格式

{
  "EmpId": 1,
  "Name": "Kaushik",
  "Designation": ".net Developer",
  "JoiningDate": "09/23/2013",
  "Skill": [
    {
      "Id": 1,
      "SkillName": "C#"
    },
    {
      "Id": 2,
      "SkillName": "PHP"
    },
    {
      "Id": 3,
      "SkillName": "java"
    }
  ]
}

这是我正在研究的JSON格式.问题描述

  1. 我想附加文件数据,所以我可以添加更多的json,为此我需要检查是否已经有一些数据?
  2. 第二,我想在json文件中附加数据,附加的数据形式将如下所示
[
    {
        "EmpId": 1,
        "Name": "Kaushik",
        "Designation": ".net Developer",
        "JoiningDate": "09/23/2013",
        "Skill": [
            {
                "Id": 1,
                "SkillName": "C#"
            },
            {
                "Id": 2,
                "SkillName": "PHP"
            },
            {
                "Id": 3,
                "SkillName": "java"
            }
        ]
    },
    {
        "EmpId": 1,
        "Name": "Kaushik",
        "Designation": ".net Developer",
        "JoiningDate": "09/23/2013",
        "Skill": [
            {
                "Id": 1,
                "SkillName": "C#"
            },
            {
                "Id": 2,
                "SkillName": "PHP"
            },
            {
                "Id": 3,
                "SkillName": "java"
            }
        ]
    } ]

所以主要的问题是我没有得到附加文件的确切逻辑.

我正在通过char读取char文件,如下所示


    int count = 0;
                EmployeeDetail employee = new EmployeeDetail
                {

                    EmpId = ++count,
                    Name = formCollection["Name"],
                    Designation = formCollection["Designation"],
                    JoiningDate = formCollection["JoiningDate"],
                    Skill = new List 
                    {
                        new Skills(){Id = 1, SkillName = "C#"},
                        new Skills(){Id = 2, SkillName = "PHP"},
                        new Skills(){Id = 3, SkillName = "java"}
                    }

                };

                string json = JsonConvert.SerializeObject(employee,Formatting.Indented);
                var dataFile = Server.MapPath("~/App_Data/json_data.json");
                //Reading the file 
                StreamReader reader = new StreamReader(dataFile);
                int Tchar = 0;
                char ch;
                do
                {
                    ch = (char)reader.Read();

                    Response.Write(ch);
                    Tchar++;
                } while (!reader.EndOfStream);
                reader.Close();

                StreamWriter file = new StreamWriter(dataFile,append:true);

                file.WriteLine(json);

                file.Close();

所以任何帮助表示赞赏谢谢

GON*_*ale 19

您最好和最可靠的方法是不附加到文件,而是读取整个JSON文件并反序列化为对象,附加到对象集合,然后将输出序列化回JSON文件.

我为你创建了这个示例(相应地更改路径和类):

var filePath = @"C:\Users\grahamo\Documents\Visual Studio 2013\Projects\WebApplication1\WebApplication1\bin\path.json";
// Read existing json data
var jsonData = System.IO.File.ReadAllText(filePath);
// De-serialize to object or create new list
var employeeList = JsonConvert.DeserializeObject<List<EmployeeDetail>>(jsonData) 
                      ?? new List<EmployeeDetail>();

// Add any new employees
employeeList.Add(new EmployeeDetail()
{
    Name = "Test Person 1"
});
employeeList.Add(new EmployeeDetail()
{
    Name = "Test Person 2"
});

// Update json data string
jsonData = JsonConvert.SerializeObject(employeeList);
System.IO.File.WriteAllText(filePath, jsonData);
Run Code Online (Sandbox Code Playgroud)

如果我是新人,如果我帮助你,可以选择投票或打勾.