servicestack - 一次反序列化json一条记录
问题描述
我正在处理大型 json 文件,内存是一个问题。我想从文件中一次将一个对象读入内存。这可能吗?
在 ServiceStack.Text 文档中,它说有一个使用阅读器/流的 API
但我看不出如何让它发挥作用。文件太大,无法一次性反序列化。SS可以处理这种情况吗?
谢谢
解决方案
不,您需要使用像System.Text.Json Utf8JsonReader这样的流式 JSON 解析器,这是System.Text.Json 介绍页面上的示例:
byte[] data = Encoding.UTF8.GetBytes(json);
Utf8JsonReader reader = new Utf8JsonReader(data, isFinalBlock: true, state: default);
while (reader.Read())
{
Console.Write(reader.TokenType);
switch (reader.TokenType)
{
case JsonTokenType.PropertyName:
case JsonTokenType.String:
{
string text = reader.GetString();
Console.Write(" ");
Console.Write(text);
break;
}
case JsonTokenType.Number:
{
int value = reader.GetInt32();
Console.Write(" ");
Console.Write(value);
break;
}
// Other token types elided for brevity
}
Console.WriteLine();
}
推荐阅读
- visual-studio-code - vscode中的自动右引号
- python - 将文本文件中的列拆分为数组
- maven - Jenkins - 如何在第二个 maven 命令中使用第一个 maven 命令的输出?
- reactjs - 反应 devtools 跟踪 redux 操作
- laravel - Laravel 嵌套资源控制器策略
- django - 如何在 Django 模型上添加复杂的约束?
- swiftui - 当@FetchRequest 谓词过滤器更改时,将 SwiftUI @FetchedResults 计数从子视图返回到父视图
- android - 从按钮继承 onClick 属性
- javascript - React 组件输入验证(useState())落后一步
- php - 如何使用 php file_exist