Ejemplo n.º 1
0
        private static void TrySimplifyingJson(RavenJObject jObject, JsonSerializer jsonSerializer)
        {
            if (jObject.Tag == null)
            {
                return;
            }
            var resolveContract = jsonSerializer.ContractResolver.ResolveContract(jObject.Tag.GetType());
            var objectContract  = resolveContract as JsonObjectContract;

            if (objectContract == null)
            {
                return;
            }

            var deferredActions = new List <Action>();

            foreach (var kvp in jObject)
            {
                var prop = kvp;
                if (prop.Value == null)
                {
                    continue;
                }
                var obj = prop.Value as RavenJObject;
                if (obj == null)
                {
                    continue;
                }

                var jsonProperty = objectContract.Properties.GetClosestMatchProperty(prop.Key);

                if (ShouldSimplifyJsonBasedOnType(obj.Value <string>("$type"), jsonProperty) == false)
                {
                    continue;
                }

                if (obj.ContainsKey("$values") == false)
                {
                    deferredActions.Add(() => obj.Remove("$type"));
                }
                else
                {
                    deferredActions.Add(() => jObject[prop.Key] = obj["$values"]);
                }
            }
            foreach (var deferredAction in deferredActions)
            {
                deferredAction();
            }

            foreach (var prop in jObject.Where(prop => prop.Value != null))
            {
                switch (prop.Value.Type)
                {
                case JTokenType.Array:
                    foreach (var item in ((RavenJArray)prop.Value))
                    {
                        var ravenJObject = item as RavenJObject;
                        if (ravenJObject != null)
                        {
                            TrySimplifyingJson(ravenJObject, jsonSerializer);
                        }
                    }
                    break;

                case JTokenType.Object:
                    TrySimplifyingJson((RavenJObject)prop.Value, jsonSerializer);
                    break;
                }
            }
        }
Ejemplo n.º 2
0
        private static void TrySimplifyingJson(RavenJObject jObject, JsonSerializer jsonSerializer)
        {
            if (jObject.Tag == null)
                return;
            var resolveContract = jsonSerializer.ContractResolver.ResolveContract(jObject.Tag.GetType());
            var objectContract = resolveContract as JsonObjectContract;
            if (objectContract == null)
                return;

            var deferredActions = new List<Action>();
            foreach (var kvp in jObject)
            {
                var prop = kvp;
                if (prop.Value == null)
                    continue;
                var obj = prop.Value as RavenJObject;
                if (obj == null)
                    continue;

                var jsonProperty = objectContract.Properties.GetClosestMatchProperty(prop.Key);

                if (ShouldSimplifyJsonBasedOnType(obj.Value<string>("$type"), jsonProperty) == false)
                    continue;

                if (obj.ContainsKey("$values") == false)
                {
                    deferredActions.Add(() => obj.Remove("$type"));
                }
                else
                {
                    deferredActions.Add(() => jObject[prop.Key] = obj["$values"]);
                }
            }
            foreach (var deferredAction in deferredActions)
            {
                deferredAction();
            }

            foreach (var prop in jObject.Where(prop => prop.Value != null))
            {
                switch (prop.Value.Type)
                {
                    case JTokenType.Array:
                        foreach (var item in ((RavenJArray)prop.Value))
                        {
                            var ravenJObject = item as RavenJObject;
                            if (ravenJObject != null)
                                TrySimplifyingJson(ravenJObject, jsonSerializer);
                        }
                        break;
                    case JTokenType.Object:
                        TrySimplifyingJson((RavenJObject)prop.Value, jsonSerializer);
                        break;
                }
            }
        }