/// <summary> /// </summary> /// <param name="baseType">The property type that is get or set (aka the assignable type).</param> internal ConfigTypeJsonConverter(Type baseType) //, JsonSerializer innerSerializer) { Contract.Requires <ArgumentNullException>(baseType != null); //Contract.Requires<ArgumentNullException>(innerSerializer != null); //_innerSerializer = innerSerializer; _baseType = baseType; // Determine possible types _possibleTypes = LogJamConfigTypes.GetConcreteTypesFor(baseType).ToArray(); // Create property name => types Lookup _typesWithProperty = _possibleTypes.SelectMany(type => type.GetProperties().Select(property => new { type, property })) .ToLookup(a => a.property.Name, a => a.type); // Create TypeHint -> type lookup _typesWithTypeHint = _possibleTypes.SelectMany(type => JsonTypeHintAttribute.For(type).Select(jsonHint => new { jsonHint, type })) .ToLookup(a => a.jsonHint, a => a.type); // Create list of TypeHint properties _typeHintProperties = new HashSet <string>(_typesWithTypeHint.Select(grouping => grouping.Key.Property), StringComparer.OrdinalIgnoreCase); }
public JsonContract ResolveContract(Type type) { JsonContract contract = _innerContractResolver.ResolveContract(type); if ((contract is JsonObjectContract) && LogJamConfigTypes.IsRegisteredAssignableType(type)) { contract.Converter = new ConfigTypeJsonConverter(type); //, _innerSerializer); } return(contract); }