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); }
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; }
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."); } } }
public DynamicObjectConverter(KnownTypesRegistry knownTypes) : base(knownTypes) { }
public TypeInfoConveter(KnownTypesRegistry knownTypes) : base(knownTypes) { }
public VariableQueryArgumentListConverter(KnownTypesRegistry knownTypesRegistry) : base(knownTypesRegistry) { }
public ExpressionConverter(KnownTypesRegistry knownTypesRegistry, bool handleSubtypes) : base(knownTypesRegistry, handleSubtypes) { }
public ExpressionConverter(KnownTypesRegistry knownTypesRegistry) : base(knownTypesRegistry, false) { }
private static JsonConverter CreateObjectConverter(Type type, KnownTypesRegistry knownTypes) => (JsonConverter)Activator.CreateInstance(typeof(ObjectConverter <>).MakeGenericType(type), knownTypes) !;
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 !); } }