Example #1
0
        /// <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);
        }
Example #2
0
        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
        {
            var jsonTypeHint = JsonTypeHintAttribute.For(value.GetType()).FirstOrDefault();

            //JToken token;
            //using (JTokenWriter jTokenWriter = new JTokenWriter())
            //{
            //	serializer.Serialize(jTokenWriter, value);
            //	token = jTokenWriter.Token;
            //}

            //using (JTokenReader jTokenReader = new JTokenReader(token))
            //{
            //	if (jsonTypeHint != null)
            //	{
            //		JObject jo = JObject.FromObject(value);
            //		jo.AddFirst(new JProperty(jsonTypeHint.Property, jsonTypeHint.Value));
            //		writer.WriteToken(jo.CreateReader());
            //	}
            //	else
            //	{
            //		writer.WriteToken(jTokenReader);
            //	}
            //}

            JObject jo = JObject.FromObject(value);

            if (jsonTypeHint != null)
            {
                jo.AddFirst(new JProperty(jsonTypeHint.Property, jsonTypeHint.Value));
            }
            writer.WriteToken(jo.CreateReader());
        }