/// <inheritdoc /> public override JsonReader CreateJsonReader(Type type, Stream readStream, Encoding effectiveEncoding) { if (type == null) { throw Error.ArgumentNull("type"); } if (readStream == null) { throw Error.ArgumentNull("readStream"); } if (effectiveEncoding == null) { throw Error.ArgumentNull("effectiveEncoding"); } BsonReader reader = new BsonReader(new BinaryReader(readStream, effectiveEncoding)); try { // Special case discussed at http://stackoverflow.com/questions/16910369/bson-array-deserialization-with-json-net // Dispensed with string (aka IEnumerable<char>) case above in ReadFromStream() reader.ReadRootValueAsArray = typeof(IEnumerable).IsAssignableFrom(type) && !typeof(IDictionary).IsAssignableFrom(type); } catch { // Ensure instance is cleaned up in case of an issue ((IDisposable)reader).Dispose(); throw; } return(reader); }
private static string ToJson(BsonDocument bson) { using (var stream = new MemoryStream()) { using (var writer = new BsonBinaryWriter(stream)) { BsonSerializer.Serialize(writer, typeof(BsonDocument), bson); } stream.Seek(0, SeekOrigin.Begin); using (var reader = new Newtonsoft.Json.Bson.BsonDataReader(stream)) { var sb = new StringBuilder(); var sw = new StringWriter(sb); using (var jWriter = new JsonTextWriter(sw)) { jWriter.DateTimeZoneHandling = DateTimeZoneHandling.Utc; jWriter.WriteToken(reader); } return(sb.ToString()); } } }