我正在处理一个文件来添加/检索数据。数据格式为 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格式。 问题描述
[ { "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();
所以感谢任何帮助谢谢
答案 0 :(得分:16)
您最好和最可靠的方法是不附加到文件,而是读取整个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);
如果我是新人,请立即投票或打勾作为答案,如果我帮助过你的话。
答案 1 :(得分:1)
CopyTo
上有一个FileStream
方法。
因此,您不需要读取char-by-char,打开文件流并CopyTo
到响应流。
另外我建议你首先重新编译文件(使用Json.NET,你可以简单地使用dynamic
来避免搞乱具体类型),并且因为它是一个对象数组,然后添加你的新对象到这个数组并保存回来。
由于您重新保存整个文件,格式将始终正确。
P.S。你可能无法只追加,因为文件中的序列化JSON对象是“已关闭”(你有} ]
),所以附加文本将无效。