簡體   English   中英

如何使用C#中的流讀取器有效地反序列化帶有嵌套對象的JSON對象?

[英]How do I efficiently deserialize a JSON object with nested objects using a stream reader in C#?

我想有效地反序列化包含嵌套的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結果?

現在有一個庫可以完全滿足您的需求。 它將一次讀取一個字節的JSON並返回結果。 完整的描述和用法示例在這里

它可以使您避免重新發明輪子。

本質上,此庫允許您解析完整的JSON對象或定位嵌套對象。 在任何一種情況下,這都是解析JSON的非常有效的方法,並且比JSON.NET更快。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM