use*_*595 130 c# json json.net asp.net-web-api
我需要在C#中使用JSON格式将以下数据写入文本文件.括号对于它是有效的JSON格式很重要.
[
{
"Id": 1,
"SSN": 123,
"Message": "whatever"
},
{
"Id": 2,
"SSN": 125,
"Message": "whatever"
}
]
Run Code Online (Sandbox Code Playgroud)
这是我的模型类:
public class data
{
public int Id { get; set; }
public int SSN { get; set; }
public string Message { get; set;}
}
Run Code Online (Sandbox Code Playgroud)
Lia*_*iam 243
我推荐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);
Run Code Online (Sandbox Code Playgroud)
或者上面代码稍微更有效的版本(不使用字符串作为缓冲区):
//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);
}
Run Code Online (Sandbox Code Playgroud)
文档:将JSON序列化为文件
为什么?这是常见串行器和基准测试之间的功能比较 †‡.
以下是从链接文章中获取的性能图表:
这篇单独的帖子指出:
Json.NET一直是内存高效的,流式读取和写入大型文档而不是将它们完全加载到内存中,但我能够找到几个可以减少对象分配的关键位置...... (现在) Json.Net (6.0)分配的内存比JavaScriptSerializer少8倍
‡.
†基准测试似乎是Json.Net 5,当前版本(写入时)是10.没有提到使用什么版本的标准.Net序列化器
‡这些测试显然来自管理图书馆的开发人员.我还没有核实他们的说法.如有疑问,请自行测试.
小智 54
Liam的答案中的示例将文件作为字符串保存在一行中.我更喜欢添加格式.将来某人可能希望在文件中手动更改某些值.如果添加格式,则更容易.
以下添加了基本的JSON缩进:
string json = JsonConvert.SerializeObject(_data.ToArray(), Formatting.Indented);
Run Code Online (Sandbox Code Playgroud)
使用JavaScriptSerializer类有内置的功能:
var json = JavaScriptSerializer.Serialize(data);
Run Code Online (Sandbox Code Playgroud)
小智 5
var responseData = //Fetch Data
string jsonData = JsonConvert.SerializeObject(responseData, Formatting.None);
System.IO.File.WriteAllText(Server.MapPath("~/JsonData/jsondata.txt"), jsonData);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
259732 次 |
| 最近记录: |