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); }
public object ResolveOrigin(string id, JsonResolveLinkContext resolveContext) { if (id == null) { return(resolveContext.CreateEmpty("")); } return(Options.GetLinkProvider(resolveContext.Type).ResolveOrigin(id, resolveContext)); }
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)); }
public abstract object ResolveLink(string link, JsonResolveLinkContext resolveContext);
public override object ResolveOrigin(string id, JsonResolveLinkContext resolveContext) { return(_linkData.ResolveOrigin(id, resolveContext)); }
public object ResolveOrigin (string id, JsonResolveLinkContext resolveContext) { if (id == null) return resolveContext.CreateEmpty(""); return Options.GetLinkProvider(resolveContext.Type).ResolveOrigin(id, resolveContext); }
public override object ResolveLink(string link, JsonResolveLinkContext resolveContext) { link = GetAbsoluteLink(link, GenerateLink(resolveContext.Context)); return(GetRootLinkData(resolveContext.Context).ResolveLink(link, resolveContext)); }
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 ResolveLink(string link, JsonResolveLinkContext resolveContext) { return(_linkData.ResolveLink(link, resolveContext)); }
public abstract object ResolveOrigin(string id, JsonResolveLinkContext resolveContext);