protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization) { DocumentMap map; mappings.TryGet(member.DeclaringType, out map); var property = base.CreateProperty(member, memberSerialization); // ID properties are stored as columns if (property.PropertyName == "Id" && map != null) { property.Ignored = true; } // Indexed properties are stored as columns if (map != null && map.IndexedColumns.Any(c => c.Property != null && c.Property.Name == member.Name)) { property.Ignored = true; } if (!property.Writable) { var property2 = member as PropertyInfo; if (property2 != null) { var hasPrivateSetter = property2.GetSetMethod(true) != null; property.Writable = hasPrivateSetter; } } return(property); }
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { writer.WriteStartObject(); DocumentMap map = null; RelationalMappings?.TryGet(value.GetType(), out map); var documentType = value.GetType().GetTypeInfo(); // Always write the designating property first writer.WritePropertyName(TypeDesignatingPropertyName); serializer.Serialize(writer, documentType.GetProperty(TypeDesignatingPropertyName)?.GetValue(value, null)); var properties = unmappedReadablePropertiesCache.GetOrAdd(documentType, t => GetUnmappedReadableProperties(t, map)); foreach (var property in properties) { writer.WritePropertyName(property.Name); serializer.Serialize(writer, GetPropertyValue(property, value)); } writer.WriteEndObject(); }