Ejemplo n.º 1
0
 private static bool IsJson(StreamWithCachedHeader stream)
 {
     // in BSON first four bytes are int32 which represents content length
     // as result we can't distigush between json and bson based on first 4 bytes
     // in bson 5-th byte is value type
     var bsonType = stream.Header[4];
     return stream.ActualHeaderSize < 5 || bsonType > (byte)BsonType.RavenDBCustomFloat;
 }
Ejemplo n.º 2
0
        /// <summary>
        /// Convert a byte array to a RavenJObject
        /// </summary>
        public static RavenJObject ToJObject(this Stream self)
        {
            var streamWithCachedHeader = new StreamWithCachedHeader(self, 5);
            // note that we intentionally don't close it here
            var jsonReader = new JsonTextReader(new StreamReader(streamWithCachedHeader));

            return(RavenJObject.Load(jsonReader));
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Convert a byte array to a RavenJObject
        /// </summary>
        public static RavenJObject ToJObject(this Stream self)
        {
            var streamWithCachedHeader = new StreamWithCachedHeader(self, 5);
            if (IsJson(streamWithCachedHeader))
            {
                // note that we intentionally don't close it here
                var jsonReader = new JsonTextReader(new StreamReader(streamWithCachedHeader));
                return RavenJObject.Load(jsonReader);
            }

            return RavenJObject.Load(new BsonReader(streamWithCachedHeader)
            {
                DateTimeKindHandling = DateTimeKind.Utc,
            });
        }
Ejemplo n.º 4
0
        private static bool IsJson(StreamWithCachedHeader stream)
        {
            var header = stream.Header;

            if (header[0] == '{')
            {
                return(true);
            }

            if (header[0] == 239 && header[1] == 187 && header[2] == 191)
            {
                return(true);
            }

            return(false);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Convert a byte array to a RavenJObject
        /// </summary>
        public static RavenJObject ToJObject(this Stream self)
        {
            var streamWithCachedHeader = new StreamWithCachedHeader(self, 5);

            if (IsJson(streamWithCachedHeader))
            {
                using (var jsonReader = RavenJsonTextReaderFromStream.Create(streamWithCachedHeader))
                {
                    return(RavenJObject.Load(jsonReader));
                }
            }

            return(RavenJObject.Load(new BsonReader(streamWithCachedHeader)
            {
                DateTimeKindHandling = DateTimeKind.Utc,
            }));
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Convert a byte array to a RavenJObject
        /// </summary>
        public static RavenJObject ToJObject(this Stream self)
        {
            var streamWithCachedHeader = new StreamWithCachedHeader(self, 3);

            if (IsJson(streamWithCachedHeader))
            {
                using (var streamReader = new StreamReader(streamWithCachedHeader, Encoding.UTF8, false, 1024, true))
                    using (var jsonReader = new RavenJsonTextReader(streamReader))
                    {
                        return(RavenJObject.Load(jsonReader));
                    }
            }

            return(RavenJObject.Load(new BsonReader(streamWithCachedHeader)
            {
                DateTimeKindHandling = DateTimeKind.Utc,
            }));
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Convert a byte array to a RavenJObject
        /// </summary>
        public static RavenJObject ToJObject(this Stream self)
        {
            var streamWithCachedHeader = new StreamWithCachedHeader(self, 5);

            using (var counting = new CountingStream(streamWithCachedHeader))
            {
                if (IsJson(streamWithCachedHeader))
                {
                    // note that we intentionally don't close it here
                    var jsonReader   = new JsonTextReader(new StreamReader(counting));
                    var ravenJObject = RavenJObject.Load(jsonReader);
                    RegisterJsonStreamDeserializationMetrics((int)counting.NumberOfReadBytes);
                    return(ravenJObject);
                }

                var deserializedObject = RavenJObject.Load(new BsonReader(counting)
                {
                    DateTimeKindHandling = DateTimeKind.Utc,
                });
                RegisterJsonStreamDeserializationMetrics((int)counting.NumberOfReadBytes);
                return(deserializedObject);
            }
        }