これは、私が独自のパーサー/デシリアライザーで考えた使用例の 1 つです。
私は最近、この JSON 形状を逆シリアル化する簡単な例を作成しました (StreamReader を介して読み取られる JSON テキストをパーサーに供給することにより)。
{
"fathers" : [
{
"id" : 0,
"married" : true,
"name" : "John Lee",
"sons" : [
{
"age" : 15,
"name" : "Ronald"
}
],
"daughters" : [
{
"age" : 7,
"name" : "Amy"
},
{
"age" : 29,
"name" : "Carol"
},
{
"age" : 14,
"name" : "Barbara"
}
]
},
{
"id" : 1,
"married" : false,
"name" : "Kenneth Gonzalez",
"sons" : [
],
"daughters" : [
]
},
{
"id" : 2,
"married" : false,
"name" : "Larry Lee",
"sons" : [
{
"age" : 4,
"name" : "Anthony"
},
{
"age" : 2,
"name" : "Donald"
}
],
"daughters" : [
{
"age" : 7,
"name" : "Elizabeth"
},
{
"age" : 15,
"name" : "Betty"
}
]
},
//(... etc)
]
}
... これらの POCO に:
https://github.com/ysharplanguage/FastJsonParser#POCOs
(具体的には、「FathersData」、「Father」、「Son」、「Daughter」)
そのサンプルには次のものも含まれています。
(1) Father[] 配列の相対アイテム インデックスに対するサンプル フィルター (たとえば、最初の 10 個だけを取得するため)、および
(2) それぞれの父親の逆シリアル化が返されるときに、父親の娘のプロパティを動的に設定する方法 (つまり、コールバックの目的で、呼び出し元がパーサーの Parse メソッドに渡すデリゲートのおかげです)。
残りのビットについては、以下を参照してください。
ParserTests.cs : static void FilteredFatherStreamTestDaughterMaidenNamesFixup()
( 829行目から904行目)
12MB から 180MB の JSON ファイルをいくつか解析し、そのコンテンツの任意のサブセットを POCO に逆シリアル化するために、私が控えめなラップトップ (*) で観察したパフォーマンス
(または緩く型付けされた辞書 ((文字列、オブジェクト) キーと値のペアのみ) への変換もサポートされています)
およそ 20MB/秒から 40MB/秒 (**) の範囲です。
(例: 12MB の JSON ファイルの場合、POCO に約 300 ミリ秒)
ここで入手可能な詳細情報:
https://github.com/ysharplanguage/FastJsonParser#Performance
'HTH、
(*) (Win7 64 ビット @ 2.5Ghz を実行)
(**) (スループットは、入力 JSON の形状/複雑さ (サブオブジェクトのネストの深さなど) やその他の要因に大きく依存します)