Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用System.Text.Json一次读取一条记录_C#_Asp.net Core_Asp.net Core 3.0_System.text.json - Fatal编程技术网

C# 使用System.Text.Json一次读取一条记录

C# 使用System.Text.Json一次读取一条记录,c#,asp.net-core,asp.net-core-3.0,system.text.json,C#,Asp.net Core,Asp.net Core 3.0,System.text.json,我试图使用.NETCore3.0一次性将一条json记录读入内存 本页: 使用读卡器给出此示例: byte[] data = Encoding.UTF8.GetBytes(json); Utf8JsonReader reader = new Utf8JsonReader(data, isFinalBlock: true, state: default); while (reader.Read()) { Console.Write(reader.TokenType); swit

我试图使用.NETCore3.0一次性将一条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();
}
在本例中,它加载整个字节数组。我主要关心的是内存,因为我正在处理大型json文件,我不想只加载当前正在处理的记录(或者至少加载一个较小的块)

我不知道如何将字节流传递到
Utf8JsonReader
并一次读取一条记录


使用.net core 3.0一次读取一条记录的简单方法是什么?

实现这种形式的功能的方法是将JSON行文件格式与
StreamReader
类一起使用。JSON行文件扩展名为.jsonl

这将在每个JSON对象后使用新行字符修改JSON字符串。有了它,您可以使用
StreamReader.ReadLine
,然后反序列化整行


有关更多详细信息,请参见JSON行

由于json“包装”了整个json主体的大部分内容,我怀疑逐行阅读它的可能性。也许你可以把它保存在更小的块中,例如每个文件只有10k个条目。如果您需要一些工作,您可能还可以通过查找匹配的大括号将其切分为更小的部分,并解析中间的内容等。没有任何
JsonTextReader
等效项?您的输入是多个项目的简单数组,还是隐藏在其他元素中?如果它是一个简单的数组,您可能能够读入每个元素(逐字符以
{}
开始和结束,但除此之外,我怀疑它是否可能。我不知道更简单的方法,但如果您确实需要解决方案来迭代每个对象。最好在打开和关闭
{}时与regex匹配
我在这里找到了如何做我想做的事情的示例: