Example #1
0
 public override object ReadJson (JsonReader reader, Type type, object existingValue, JsonSerializer serializer)
 {
     if (reader.TokenType != JsonToken.String)
         throw new Exception("Link value must be a string.");
     var resolveContext = new JsonResolveLinkContext(type, serializer, reader as IJsonLineInfo);
     return resolveContext.Context.ResolveLink(reader.Value.ToString(), resolveContext);
 }
Example #2
0
 public object ResolveOrigin(string id, JsonResolveLinkContext resolveContext)
 {
     if (id == null)
     {
         return(resolveContext.CreateEmpty(""));
     }
     return(Options.GetLinkProvider(resolveContext.Type).ResolveOrigin(id, resolveContext));
 }
Example #3
0
 public object ResolveLink(string link, JsonResolveLinkContext resolveContext)
 {
     if (link == null)
     {
         throw new ArgumentNullException("link");
     }
     return(Options.GetLinkProvider(resolveContext.Type).ResolveLink(link, resolveContext));
 }
        public override object ReadJson(JsonReader reader, Type type, object existingValue, JsonSerializer serializer)
        {
            var resolveContext = new JsonResolveLinkContext(type, serializer, reader as IJsonLineInfo);

            return(serializer.Deserialize <Dictionary <string, string> >(reader).ToDictionary(
                       p => resolveContext.Context.ResolveLink(p.Key, resolveContext),
                       p => resolveContext.Context.ResolveLink(p.Value, resolveContext)
                       ));
        }
        public override sealed T FromJObject(JsonReader reader, JObject jo, Type objectType, T existingValue, JsonSerializer serializer)
        {
            var resolveContext = new JsonResolveLinkContext(objectType, serializer, reader as IJsonLineInfo);

            resolveContext.UpdateTypeFromTypeProperty(objectType, (string)jo.Property(JsonLinkedContext.TypePropName));
            var value = (T)resolveContext.Context.ResolveOrigin(GetId(resolveContext, jo), resolveContext);

            PopulateFromJObject(reader, jo, objectType, value, serializer);
            return(value);
        }
        private static string GetId(JsonResolveLinkContext resolveContext, JObject jobj)
        {
            string idProp = resolveContext.IdProp;

            if (idProp != JsonLinkedContext.IndexPropName)
            {
                return((string)jobj.Property(idProp));
            }
            else
            {
                var collection = resolveContext.Context.Stack.Last() as ICollection;
                return(collection != null?collection.Count.ToStringInv() : "");
            }
        }
            public TValue ResolveLink(string path, JsonResolveLinkContext resolveContext)
            {
                string untypedPath = GetUntypedLink(path);
                TValue value;

                if (!_pathToValue.TryGetValue(untypedPath, out value))
                {
                    Log.Trace("  {0} - created link in {1}".Fmt(path, resolveContext.Context.StackString));
                    value = (TValue)resolveContext.CreateEmpty(path);
                    _pathToValue[untypedPath] = value;
                    _valueToPath[value]       = untypedPath;
                    _unresolvedLinks.Add(untypedPath);
                }
                else
                {
                    Log.Trace("  {0} - resolved link in {1}".Fmt(path, resolveContext.Context.StackString));
                }
                return(value);
            }
            public TValue ResolveOrigin(string id, JsonResolveLinkContext resolveContext)
            {
                string untypedId = GetUntypedLink(id);
                string path      = _linkProvider.GenerateLink(resolveContext.Context);

                path = !path.IsNullOrEmpty() ? path + JsonLinkedContext.LinkPathSeparator + untypedId : untypedId;
                TValue value;

                if (!_pathToValue.TryGetValue(path, out value))
                {
                    Log.Trace("  {0} - created origin in {1}".Fmt(path, resolveContext.Context.StackString));
                    value = (TValue)resolveContext.CreateEmpty(id);
                    _pathToValue[path]  = value;
                    _valueToPath[value] = path;
                }
                else
                {
                    _unresolvedLinks.Remove(path);
                    Log.Trace("  {0} - resolved origin in {1}".Fmt(path, resolveContext.Context.StackString));
                }
                return(value);
            }
            private object GetValue(string link, JsonResolveLinkContext resolveContext, bool isOrigin)
            {
                string untypedLink = GetUntypedLink(link);
                TValue value;

                if (!_links.TryGetValue(untypedLink, out value))
                {
                    Log.Trace("  {0} - created  ({1})".Fmt(link, resolveContext.Context.StackString));
                    _links[untypedLink] = value = (TValue)resolveContext.CreateEmpty(link);
                    if (!isOrigin)
                    {
                        _unresolvedLinks.Add(untypedLink);
                    }
                }
                else
                {
                    Log.Trace("  {0} - resolved ({1})".Fmt(link, resolveContext.Context.StackString));
                    if (isOrigin)
                    {
                        _unresolvedLinks.Remove(untypedLink);
                    }
                }
                return(value);
            }
 public object ResolveLink(string link, JsonResolveLinkContext resolveContext)
 {
     return(GetValue(link, resolveContext, false));
 }
 public object ResolveOrigin(string id, JsonResolveLinkContext resolveContext)
 {
     return(GetValue(id, resolveContext, true));
 }
 public override object ResolveLink(string link, JsonResolveLinkContext resolveContext)
 {
     return(GetRootLinkData(resolveContext.Context).ResolveLink(link, resolveContext));
 }
 public override object ResolveOrigin(string id, JsonResolveLinkContext resolveContext)
 {
     return(GetRootLinkData(resolveContext.Context).ResolveOrigin(id, resolveContext));
 }
Example #14
0
 public abstract object ResolveLink(string link, JsonResolveLinkContext resolveContext);
Example #15
0
 public override object ResolveOrigin(string id, JsonResolveLinkContext resolveContext)
 {
     return(_linkData.ResolveOrigin(id, resolveContext));
 }
Example #16
0
 public object ResolveOrigin (string id, JsonResolveLinkContext resolveContext)
 {
     if (id == null)
         return resolveContext.CreateEmpty("");
     return Options.GetLinkProvider(resolveContext.Type).ResolveOrigin(id, resolveContext);
 }
Example #17
0
 public override object ResolveLink(string link, JsonResolveLinkContext resolveContext)
 {
     link = GetAbsoluteLink(link, GenerateLink(resolveContext.Context));
     return(GetRootLinkData(resolveContext.Context).ResolveLink(link, resolveContext));
 }
Example #18
0
 public object ResolveLink (string link, JsonResolveLinkContext resolveContext)
 {
     if (link == null)
         throw new ArgumentNullException("link");
     return Options.GetLinkProvider(resolveContext.Type).ResolveLink(link, resolveContext);
 }
Example #19
0
 public override object ResolveLink(string link, JsonResolveLinkContext resolveContext)
 {
     return(_linkData.ResolveLink(link, resolveContext));
 }
Example #20
0
 public abstract object ResolveOrigin(string id, JsonResolveLinkContext resolveContext);