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);

しかし、どちらのフレームワークも、JSON サブ配列全体contentsを一度にデシリアライズしてメモリに読み込みます。

一度に 1 つの JsonFileInfo オブジェクトのストリームからこの JSON の結果を読み取るにはどうすればよいですか?

4

1 に答える 1

1

探していることを正確に実行できるライブラリが利用できるようになりました。一度に 1 バイトずつ JSON を読み取り、結果を返します。完全な説明と使用例はこちら.

車輪の再発明を避けることができるかもしれません。

基本的に、このライブラリを使用すると、完全な JSON オブジェクトを解析するか、ネストされたオブジェクトをターゲットにすることができます。いずれの場合も JSON を解析する非常に効率的な方法であり、JSON.NET よりも高速です。

于 2014-11-11T16:35:35.817 に答える