示例#1
0
        /// <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);
        }
示例#2
0
 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());
         }
     }
 }