Exemplo n.º 1
0
        public static T[] ParseResultsArray <T>(InMemoryDocumentSessionOperations session, GetDocumentResult transformedResult)
        {
            return(transformedResult.Results.Select(x =>
            {
                if (x == null)
                {
                    return null;
                }

                BlittableJsonReaderArray values;
                if (((BlittableJsonReaderObject)x).TryGet("$values", out values) == false)
                {
                    throw new InvalidOperationException("Transformed document must have a $values property");
                }

                var elementType = typeof(T).GetElementType();

                var array = values.Select(value => session.DeserializeFromTransformer(elementType, null, value as BlittableJsonReaderObject)).ToArray();
                var newArray = Array.CreateInstance(elementType, array.Length);
                Array.Copy(array, newArray, array.Length);
                return newArray;
            })
                   .Cast <T>()
                   .ToArray());
        }
Exemplo n.º 2
0
        public static IEnumerable <T> ParseValuesFromBlittableArray <T>(InMemoryDocumentSessionOperations session, BlittableJsonReaderArray blittableArray)
        {
            for (var i = 0; i < blittableArray.Length; i++)
            {
                var blittableJsonToken = blittableArray.GetValueTokenTupleByIndex(i).Item2;

                switch (blittableJsonToken)
                {
                case BlittableJsonToken.StartArray:
                    foreach (var inner in ParseValuesFromBlittableArray <T>(session, blittableArray[i] as BlittableJsonReaderArray))
                    {
                        yield return(inner);
                    }
                    break;

                case BlittableJsonToken.StartObject:
                    yield return((T)session.DeserializeFromTransformer(typeof(T), null, blittableArray[i] as BlittableJsonReaderObject));

                    break;

                case BlittableJsonToken.String:
                    var lazyString = blittableArray[i] as LazyStringValue;
                    if (lazyString != null)
                    {
                        yield return((T)(object)lazyString.ToString());
                    }
                    break;

                case BlittableJsonToken.CompressedString:
                    var lazyCompressedString = blittableArray[i] as LazyCompressedStringValue;
                    if (lazyCompressedString != null)
                    {
                        yield return((T)(object)lazyCompressedString.ToString());
                    }
                    break;

                default:
                    // TODO, check if other types need special handling as well
                    yield return((T)blittableArray[i]);

                    break;
                }
            }
        }