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);
        }
Exemplo n.º 2
0
        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();
        }