2

我想有效地反序列化包含 JSON 对象嵌套数组的 JSON 对象。

例如,一个 JSON 目录列表可以包含一个根 JSON 文件系统对象和一个文件系统对象的递归数组。

{
    "bytes": 0,
    "path": "/Public",
    "is_dir": true,
    "contents": [
        {
            "bytes": 0,
            "modified": "Mon, 18 Jul 2011 20:13:43 +0000",
            "path": "/Public/1.txt",
            "is_dir": false
        },
        {
            "bytes": 0,
            "modified": "Mon, 18 Jul 2011 20:13:43 +0000",
            "path": "/Public/2.txt",
            "is_dir": false
        }
    ]
}

相应的 C# 类看起来像这样

class JsonFileInfo
{
    public string Path;
    public long Bytes;
    public string Modified;
    public bool IsDir;
    public List<JsonFileInfo> Contents;
}

我试过 .NET DataContractJsonSerializer 例如

DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(RainstormFileInfo));
JsonFileInfo jfi = (JsonFileInfo)serializer.ReadObject(responseStream);

我也尝试过 JSON.NET JsonSerializer + JsonTextReader 例如

JsonReader reader = new JsonTextReader(new StreamReader(responseStream))
JsonSerializer serializer = new JsonSerializer();
JsonFileInfo jfi = serializer.Deserialize<JsonFileInfo>(reader);

contents但是这两个框架都一举将整个 JSON 子数组读入内存。

如何一次从流中读取一个 JsonFileInfo 对象的 JSON 结果?

4

1 回答 1

1

现在有一个库可以完全满足您的需求。它将一次读取一个字节的 JSON 并返回结果。完整的描述和使用示例在这里

它可以让你避免重新发明轮子。

本质上,这个库允许您解析完整的 JSON 对象,或定位嵌套对象。无论哪种情况,它都是解析 JSON 的一种非常有效的方法,并且比 JSON.NET 更快。

于 2014-11-11T16:35:35.817 回答