我需要在C#中使用JSON格式将以下数据写入文本文件。括号对于它是有效的JSON格式很重要。
[
{
"Id": 1,
"SSN": 123,
"Message": "whatever"
},
{
"Id": 2,
"SSN": 125,
"Message": "whatever"
}
]
这是我的模特课:
public class data
{
public int Id { get; set; }
public int SSN { get; set; }
public string Message { get; set;}
}
答案 0 :(得分:210)
我建议Json.Net,请参阅以下示例:
List<data> _data = new List<data>();
_data.Add(new data()
{
Id = 1,
SSN = 2,
Message = "A Message"
});
string json = JsonConvert.SerializeObject(_data.ToArray());
//write string to file
System.IO.File.WriteAllText(@"D:\path.txt", json);
或者稍微高效的上述代码版本(不使用字符串作为缓冲区):
//open file stream
using (StreamWriter file = File.CreateText(@"D:\path.txt"))
{
JsonSerializer serializer = new JsonSerializer();
//serialize object directly into file stream
serializer.Serialize(file, _data);
}
为什么呢?这是一个feature comparision between common serialisers as well as benchmark tests†‡。
以下是链接文章的效果图表:
这seperate post声明:
Json.NET一直保持内存效率,流式读取和写入大型文档而不是将它们完全加载到内存中,但我能够找到几个可以减少对象分配的关键位置...... (现在) Json.Net (6.0)分配的内存比JavaScriptSerializer少8倍
‡。
†基准测试似乎是Json.Net 5,当前版本(写入时)是10.没有提到使用什么版本的标准.Net序列化程序
‡这些测试显然是来自图书馆的开发人员。 我尚未验证他们的声明。如有疑问,请自行测试。
答案 1 :(得分:48)
Liam的答案中的示例将文件保存为单行中的字符串。我更喜欢添加格式。将来某人可能希望在文件中手动更改某些值。如果添加格式化,则更容易实现。
以下添加了基本的JSON缩进:
string json = JsonConvert.SerializeObject(_data.ToArray(), Formatting.Indented);
答案 2 :(得分:7)
var json = JavaScriptSerializer.Serialize(data);
答案 3 :(得分:3)
var responseData = //Fetch Data
string jsonData = JsonConvert.SerializeObject(responseData, Formatting.None);
System.IO.File.WriteAllText(Server.MapPath("~/JsonData/jsondata.txt"), jsonData);
答案 4 :(得分:0)
如果你喜欢 StreamWriter 选项,你也可以使用格式:
using (StreamWriter file = File.CreateText(mFileName))
{
JsonSerializer serializer = new JsonSerializer();
serializer.Formatting = Formatting.Indented;
serializer.Serialize(file, Current);
}