public override void WriteJson(JsonWriter writer, TypeInfo?value, JsonSerializer serializer)
        {
            writer.CheckNotNull(nameof(writer));

            if (value is not null && KnownTypesRegistry.TryGetTypeKey(value, out var typeKey))
            {
                writer.WriteValue(typeKey);
            }
Exemple #2
0
        public AquaContractResolver(KnownTypesRegistry knownTypes, IContractResolver?decorated = null)
        {
            if (decorated is AquaContractResolver self)
            {
                decorated = self._decorated;
            }

            _knownTypes = knownTypes.CheckNotNull(nameof(knownTypes));
            _decorated  = decorated?.GetType() == typeof(DefaultContractResolver) ? null : decorated;
        }
Exemple #3
0
 public Property(PropertyInfo propertyInfo, KnownTypesRegistry knownTypes)
 {
     PropertyInfo        = propertyInfo.CheckNotNull(nameof(propertyInfo));
     _knownTypes         = knownTypes.CheckNotNull(nameof(knownTypes));
     IsIgnored           = propertyInfo.GetCustomAttributes(typeof(JsonIgnoreAttribute), false).Any();
     DataMemberAttribute = (DataMemberAttribute?)propertyInfo.GetCustomAttributes(typeof(DataMemberAttribute), false)?.FirstOrDefault();
     Name             = string.IsNullOrWhiteSpace(DataMemberAttribute?.Name) ? propertyInfo.Name : DataMemberAttribute !.Name;
     EmitDefaultValue = DataMemberAttribute?.EmitDefaultValue is true;
     if (!EmitDefaultValue && propertyInfo.PropertyType.IsValueType)
     {
         DefaultValue = Activator.CreateInstance(propertyInfo.PropertyType);
     }
 }
        public override TypeInfo?ReadJson(JsonReader reader, Type objectType, TypeInfo?existingValue, JsonSerializer serializer)
        {
            reader.CheckNotNull(nameof(reader));
            serializer.CheckNotNull(nameof(serializer));

            if (reader.TokenType == JsonToken.String &&
                reader.Value is string typeKey &&
                KnownTypesRegistry.TryGetTypeInfo(typeKey, out var typeInfo))
            {
                return(typeInfo);
            }

            return(base.ReadJson(reader, objectType, existingValue, serializer));
        }
        public RemoteLinqContractResolver(KnownTypesRegistry knownTypeRegistry, IContractResolver?decorated = null)
        {
            if (decorated is RemoteLinqContractResolver self)
            {
                decorated = self._decorated;
            }

            _knownTypeRegistry = knownTypeRegistry.CheckNotNull(nameof(knownTypeRegistry));
            _decorated         = (decorated as AquaContractResolver) ?? new AquaContractResolver(_knownTypeRegistry, decorated);
            _converters        = new Dictionary <Type, JsonConverter>
            {
                { typeof(Expression), new ExpressionConverter(_knownTypeRegistry) },
                { typeof(VariableQueryArgument), new VariableQueryArgumentConverter(_knownTypeRegistry) },
                { typeof(VariableQueryArgumentList), new VariableQueryArgumentListConverter(_knownTypeRegistry) },
            };
        }
        private static void RegisterKnownTypes(KnownTypesRegistry knownTypesRegistry)
        {
            var types = typeof(RemoteLinq.Expression).Assembly
                        .GetExportedTypes()
                        .Except(new[]
            {
                typeof(Query),
            })
                        .Where(x => !x.IsGenericType)
                        .Where(x =>
            {
                var attributes = x.GetCustomAttributes(true);
                return(attributes.Any(a => a is SerializableAttribute) ||
                       attributes.Any(a => a is DataContractAttribute));
            });

            foreach (var type in types)
            {
                if (!knownTypesRegistry.TryRegister(type, type.Name))
                {
                    throw new InvalidOperationException($"Failed to register '{type}' as known type.");
                }
            }
        }
Exemple #7
0
 public DynamicObjectConverter(KnownTypesRegistry knownTypes)
     : base(knownTypes)
 {
 }
 public TypeInfoConveter(KnownTypesRegistry knownTypes)
     : base(knownTypes)
 {
 }
Exemple #9
0
 public VariableQueryArgumentListConverter(KnownTypesRegistry knownTypesRegistry)
     : base(knownTypesRegistry)
 {
 }
 public ExpressionConverter(KnownTypesRegistry knownTypesRegistry, bool handleSubtypes)
     : base(knownTypesRegistry, handleSubtypes)
 {
 }
 public ExpressionConverter(KnownTypesRegistry knownTypesRegistry)
     : base(knownTypesRegistry, false)
 {
 }
Exemple #12
0
 private static JsonConverter CreateObjectConverter(Type type, KnownTypesRegistry knownTypes)
 => (JsonConverter)Activator.CreateInstance(typeof(ObjectConverter <>).MakeGenericType(type), knownTypes) !;
Exemple #13
0
 protected ObjectConverter(KnownTypesRegistry knownTypes)
 {
     KnownTypesRegistry = knownTypes.CheckNotNull(nameof(knownTypes));
 }
        private static void RegisterJsonConverter(this IEnumerable <Type> types, Type genericConverterType, JsonSerializerOptions options, KnownTypesRegistry knownTypesRegistry)
        {
            types
            .Where(x => !options.Converters.Any(c => c.CanConvert(x)))
            .Select(CreateJsonConverter)
            .ForEach(options.Converters.Add);

            JsonConverter CreateJsonConverter(Type type)
            {
                var converterType = genericConverterType.MakeGenericType(type);
                var converter     = Activator.CreateInstance(converterType, knownTypesRegistry);

                return((JsonConverter)converter !);
            }
        }