コード例 #1
0
        /// <summary>
        ///     <see cref="JsonConverter{T}.WriteJson(JsonWriter, object, JsonSerializer)" />
        /// </summary>
        public override void WriteJson(JsonWriter writer, IGenericPersistedDTO value, JsonSerializer serializer)
        {
            // Récupération de la configuration
            var cfg = GenericJsonTypeIndex.GetConfigurationByType(value.GetType());
            var kt  = cfg.KeyType;
            var key = cfg.UnsafeGetNameByType(value.GetType());

            // Conversion
            var job = JObject.FromObject(value);

            job.Add(PersistedJsonContractResolver.TYPE_PROPERTY_NAME, key);

            // Ecriture
            job.WriteTo(writer, CONVERTERS);
        }
コード例 #2
0
        /// <summary>
        ///     <see cref="JsonConverter{T}.ReadJson(JsonReader, Type, T, bool, JsonSerializer)" />
        /// </summary>
        public override IGenericPersistedDTO ReadJson(JsonReader reader, Type objectType, IGenericPersistedDTO existingValue, bool hasExistingValue, JsonSerializer serializer)
        {
            // Récupération du type
            var obj = JObject.Load(reader);
            var val = obj[PersistedJsonContractResolver.TYPE_PROPERTY_NAME].Value <string>();

            // Récupération de la configuration
            var cfg      = GenericJsonTypeIndex.GetConfigurationByType(objectType);
            var key      = Enum.Parse(cfg.KeyType, val);
            var instance = cfg.UnsafeGetInstance(key);

            // Renvoi
            serializer.Populate(obj.CreateReader(), instance);
            return(instance);
        }
コード例 #3
0
ファイル: Entity.cs プロジェクト: webkawa/baraka
        /// <summary>
        ///     Mappage d'un DTO polymorphe sérialisable au format JSON.
        /// </summary>
        /// <typeparam name="TProperty">Type de DTO base.</typeparam>
        /// <typeparam name="TKey">Type de clef utilisée.</typeparam>
        /// <param name="property">Propriété mappée.</param>
        /// <param name="types">Liste des types supportés.</param>
        /// <param name="configuration">Actions de configuration.</param>
        protected void PropertyJsonGeneric <TProperty, TKey>(Expression <Func <TEntity, TProperty> > property, Action <GenericJsonTypeConfiguration <TProperty, TKey> > types, Action <IPropertyMapper> configuration = null)
            where TProperty : IGenericPersistedDTO
            where TKey : struct, IConvertible
        {
            Property(
                property,
                mapper =>
            {
                // Création de la configuration
                var inner = new GenericJsonTypeConfiguration <TProperty, TKey>();
                types(inner);

                // Référencement
                GenericJsonTypeIndex.AddConfiguration <TKey, TProperty>(inner);

                // Création de l'enveloppe
                var wrapper = new GenericJsonTypeWrapper <TProperty, TKey>(inner);

                // Paramétrage
                mapper.Type <GenericJsonType <TProperty, TKey> >(wrapper);
                mapper.Columns(
                    type =>
                {
                    type.Name(
                        string.Concat(
                            (property.Body as MemberExpression).Member.Name,
                            "_type"));
                },
                    dto =>
                {
                    dto.Name(
                        string.Concat(
                            (property.Body as MemberExpression).Member.Name,
                            "_data"));
                });

                configuration?.Invoke(mapper);
            });
        }