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; }
/// <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)); }
/// <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, }); }
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); }
/// <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, })); }
/// <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, })); }
/// <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); } }