いくつかのJSONデータファイルを受け取ったが、各オブジェクトにはBSONデータ型が含まれていた。その上には、本当に大きなトジソンダンプ(数百万のレコード)があります。bsonデータ型を含むmongodbによって生成されたjsonをデシリアライズ
データを逆シリアル化しようとしていますが、期待通りに失敗します。
はJson.netでこれを処理する方法はあります..."someKey" : NumberLong("1234567889"),
また、そこにISODateがあります
JSONファイルには、のようなものを持っていますか?特定のキー用の組み込みパーサーではなく、カスタム関数を使用するように設定するのはおそらくいくつかの設定があるようですね。
*非常に大きい(100ギガバイト+ファイル)のためのストリーム+たTextReaderのコードを含むように更新
using (StreamReader file = File.OpenText(@"\\largedump.txt"))
using (JsonTextReader reader = new JsonTextReader(file))
{
reader.SupportMultipleContent = true;
var serializer = new JsonSerializer();
while (reader.Read())
{
if (reader.TokenType == JsonToken.StartObject)
{
Contacts c = serializer.Deserialize<Contacts>(reader);
Console.WriteLine(c.orgId);
}
}
}
'{ "someKey":NumberLong( "1234567889")}'有効JSONではありません。 [JSON標準](http://www.json.org/)を参照してください。つまり、Json.NETは[コンストラクター](https://stackoverflow.com/questions/36958680)を含む標準への拡張をサポートしています。 JSONを '{" someKey ":new NumberLong(" 1234567889 ")}に前処理して、Json.NET – dbc
で解析することができます。DBAが厳密にダンプしなかったため無効です。これは、すでにコード化されていた「$ numberlong」を使ってjsonで表現したように優れていましたが、今調整する必要があります。 idのように見えるので、それを前処理するために読者からの文字列をキャプチャする必要があります... – zxed
'NumberLong'の前に' new'を挿入するためにRegexを使う必要があるかもしれないと思います。結果を一時ファイルにストリーミングする。 – dbc