相关疑难解决方法(0)

如何在Json.NET中将巨大的JSON文件解析为流?

我有一个非常非常大的JSON文件(1000+ MB)相同的JSON对象.例如:

[
    {
        "id": 1,
        "value": "hello",
        "another_value": "world",
        "value_obj": {
            "name": "obj1"
        },
        "value_list": [
            1,
            2,
            3
        ]
    },
    {
        "id": 2,
        "value": "foo",
        "another_value": "bar",
        "value_obj": {
            "name": "obj2"
        },
        "value_list": [
            4,
            5,
            6
        ]
    },
    {
        "id": 3,
        "value": "a",
        "another_value": "b",
        "value_obj": {
            "name": "obj3"
        },
        "value_list": [
            7,
            8,
            9
        ]

    },
    ...
]
Run Code Online (Sandbox Code Playgroud)

根JSON列表中的每个项都遵循相同的结构,因此可以单独反序列化.我已经编写了C#类来接收这些数据,并且反序列化包含单个对象的JSON文件而没有列表按预期工作.

起初,我试图在循环中直接反序列化我的对象:

JsonSerializer serializer = new JsonSerializer();
MyObject o;
using (FileStream s = File.Open("bigfile.json", FileMode.Open))
using (StreamReader sr …
Run Code Online (Sandbox Code Playgroud)

c# json json.net

21
推荐指数
3
解决办法
2万
查看次数

System.Text.Json 中是否有 Jraw 的等效项

我正在将 ASP.NET Core 2 应用程序迁移到 ASP.NET Core 3。我的控制器需要返回具有已经是 JSON 字符串的属性的对象,因此它看起来像这样:

public class Thing {
    public int Id { get; set; }
    public string Name { get; set; }
    public string Data { get; set; } // JSON Data
}

var thing = new Thing
{
    Id = 1,
    Name = "Thing",
    Data = "{\"key\":\"value\"}"
};
Run Code Online (Sandbox Code Playgroud)

Thing应序列化,以便该Data属性不是字符串,而是 JSON 对象的一部分。像这样:

{
    "id": 1,
    "name": "Thing",
    "data": {
        "key": "value"
    }
}
Run Code Online (Sandbox Code Playgroud)

在 .NET Core 2 中,Newtonsoft.Json我使用 的 …

c# json.net system.text.json asp.net-core-3.1

10
推荐指数
1
解决办法
2884
查看次数

使用System.Text.Json异步反序列化列表

可以说,我请求一个包含许多对象列表的大型json文件。我不希望它们一次全部出现在内存中,但我宁愿一个个地读取和处理它们。所以我需要将异步System.IO.Stream流转换为IAsyncEnumerable<T>。我如何使用新的System.Text.JsonAPI来做到这一点?

private async IAsyncEnumerable<T> GetList<T>(Uri url, CancellationToken cancellationToken = default)
{
    using (var httpResponse = await httpClient.GetAsync(url, cancellationToken))
    {
        using (var stream = await httpResponse.Content.ReadAsStreamAsync())
        {
            // Probably do something with JsonSerializer.DeserializeAsync here without serializing the entire thing in one go
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

c# .net-core c#-8.0 .net-core-3.0 system.text.json

7
推荐指数
2
解决办法
266
查看次数

使用 System.Text.Json 高效替换大型 JSON 的属性

我正在处理大型 JSON,其中一些元素包含以 Base 64 编码的大型(最多 100MB)文件。例如:

{ "name": "One Name", "fileContent": "...base64..." }
Run Code Online (Sandbox Code Playgroud)

我想将 fileContent 属性值存储在磁盘中(以字节形式)并将其替换为文件的路径,如下所示:

{ "name": "One Name", "fileRoute": "/route/to/file" }
Run Code Online (Sandbox Code Playgroud)

是否可以使用流或任何其他方式通过 System.Text.Json 来实现此目的,以避免在内存中使用非常大的 JSON?

json .net-core asp.net-core system.text.json

3
推荐指数
1
解决办法
818
查看次数