private static SerializableMember Map(TypeInfo ontoType, SerializableMember member) { ShouldSerialize?shouldSerializeOnType; if (member.ShouldSerialize.HasValue) { var surrogateShouldSerializeWrapper = member.ShouldSerialize.Value; if (surrogateShouldSerializeWrapper.Mode == BackingMode.Method) { if (surrogateShouldSerializeWrapper.Takes.HasValue && surrogateShouldSerializeWrapper.IsStatic) { Throw.InvalidOperationException($"Cannot map 'should serialize' {surrogateShouldSerializeWrapper} onto {ontoType}, it takes a parameter"); } var surrogateShouldSerialize = surrogateShouldSerializeWrapper.Method.Value; var surrogateShouldSerializeBinding = GetEquivalentFlagsFor(surrogateShouldSerialize.IsPublic, surrogateShouldSerialize.IsStatic); // intentionally letting this be null var shouldSerializeOnTypeMtd = ontoType.GetMethod(surrogateShouldSerialize.Name, surrogateShouldSerializeBinding); if (shouldSerializeOnTypeMtd == null) { Throw.InvalidOperationException($"No equivalent to {surrogateShouldSerialize} found on {ontoType}"); } shouldSerializeOnType = ShouldSerialize.ForMethod(shouldSerializeOnTypeMtd); } else { Throw.InvalidOperationException($"Cannot map 'should serialize' {surrogateShouldSerializeWrapper} onto {ontoType}, 'should serialize' isn't backed by a method"); return(default);
/// <summary> /// Creates a SerializableMember for the given property, with the given name, formatter, ShouldSerialize method, and whether to emit a default value. /// </summary> public static SerializableMember ForProperty(PropertyInfo property, string name, Formatter formatter, ShouldSerialize shouldSerialize, EmitDefaultValue emitDefault) => CreateInner(property?.DeclaringType?.GetTypeInfo(), name, (Getter?)property?.GetMethod, formatter, shouldSerialize, emitDefault);
/// <summary> /// Creates a SerializableMember for the given field, with the given name, formatter, ShouldSerialize method, and whether to emit a default value. /// </summary> public static SerializableMember ForField(FieldInfo field, string name, Formatter formatter, ShouldSerialize shouldSerialize, EmitDefaultValue emitDefault) => CreateInner(field?.DeclaringType?.GetTypeInfo(), name, (Getter?)field, formatter, shouldSerialize, emitDefault);
/// <summary> /// Add a property to serialize with the given name, formatter, ShouldSerialize method, and whether to emit a default value - for the type which declares the property. /// </summary> public ManualTypeDescriberBuilder WithSerializableProperty(PropertyInfo property, string name, Formatter formatter, ShouldSerialize shouldSerialize, EmitDefaultValue emitDefault) { Utils.CheckArgumentNull(shouldSerialize, nameof(shouldSerialize)); return(WithSerializableMember(property?.DeclaringType?.GetTypeInfo(), (Getter?)property?.GetMethod, name, formatter, shouldSerialize, emitDefault)); }
/// <summary> /// Add a field to serialize with the given name, formatter, ShouldSerialize method, and whether to emit a default value - for the type which declares the field. /// </summary> public ManualTypeDescriberBuilder WithSerializableField(FieldInfo field, string name, Formatter formatter, ShouldSerialize shouldSerialize, EmitDefaultValue emitDefault) { Utils.CheckArgumentNull(shouldSerialize, nameof(shouldSerialize)); return(WithSerializableMember(field?.DeclaringType?.GetTypeInfo(), (Getter?)field, name, formatter, shouldSerialize, emitDefault)); }
/// <summary> /// Add a field to serialize for the given type, using the given name, formatter, and ShouldSerialize method. /// </summary> public ManualTypeDescriberBuilder WithSerializableField(TypeInfo forType, FieldInfo field, string name, Formatter formatter, ShouldSerialize shouldSerialize) { Utils.CheckArgumentNull(shouldSerialize, nameof(shouldSerialize)); return(WithSerializableMember(forType, (Getter?)field, name, formatter, shouldSerialize, EmitDefaultValue.Yes)); }
/// <summary> /// Add a getter for the given type, with the given name, using the given getter, formatter, ShouldSerialize method, and whether to emit a default value. /// </summary> public ManualTypeDescriberBuilder WithExplicitGetter(TypeInfo forType, string name, Getter getter, Formatter formatter, ShouldSerialize shouldSerialize, EmitDefaultValue emitDefault) { Utils.CheckArgumentNull(shouldSerialize, nameof(shouldSerialize)); return(WithSerializableMember(forType, getter, name, formatter, shouldSerialize, emitDefault)); }