Example #1
0
        protected override void WriteObjectProperties(JsonWriter writer, Expression instance, IReadOnlyCollection <Property> properties, JsonSerializer serializer)
        {
            if (instance is ConstantExpression constantExpression)
            {
                writer.CheckNotNull(nameof(writer)).WritePropertyName(nameof(ConstantExpression.Type));
                serializer.CheckNotNull(nameof(serializer)).Serialize(writer, constantExpression.Type);

                var type = constantExpression.Type?.ToType();
                if (constantExpression.Value is not null)
                {
                    var valueType = constantExpression.Value.GetType();
                    if (valueType != type)
                    {
                        type = valueType;
                        writer.WritePropertyName(ValueTypePropertyName);
                        serializer.Serialize(writer, type.AsTypeInfo());
                    }
                }

                writer.WritePropertyName(nameof(ConstantExpression.Value));
                serializer.Serialize(writer, constantExpression.Value, type);
            }
            else
            {
                base.WriteObjectProperties(writer, instance, properties, serializer);
            }
        }
Example #2
0
        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);
            }
Example #3
0
        protected override void WriteObjectProperties(JsonWriter writer, VariableQueryArgumentList instance, IReadOnlyCollection <Property> properties, JsonSerializer serializer)
        {
            writer.CheckNotNull(nameof(writer)).WritePropertyName(nameof(VariableQueryArgumentList.ElementType));
            serializer.CheckNotNull(nameof(serializer)).Serialize(writer, instance.CheckNotNull(nameof(instance)).ElementType);

            writer.WritePropertyName(nameof(VariableQueryArgumentList.Values));
            serializer.Serialize(writer, instance.Values, instance.ElementType?.Type);
        }
Example #4
0
        protected override void WriteObjectProperties(JsonWriter writer, DynamicObject instance, IReadOnlyCollection <Property> properties, JsonSerializer serializer)
        {
            writer.CheckNotNull(nameof(writer));
            serializer.CheckNotNull(nameof(serializer));
            var instanceType      = instance.CheckNotNull(nameof(instance)).Type;
            var dynamicProperties = instance.Properties;

            if (TryGetWrappedValue(dynamicProperties, out var value))
            {
                var type = instanceType ?? CreateTypeInfo(value);

                writer.WritePropertyName(nameof(DynamicObject.Type));
                serializer.Serialize(writer, type);

                var propertyName   = type.IsCollection() ? ValuesProperty : ValueProperty;
                var isDynamicValue =
                    value is DynamicObject ||
                    (value is object[] objectArray && objectArray.Any(x => x is DynamicObject));
                if (isDynamicValue)
                {
                    propertyName = $"Dynamic{propertyName}";
                }

                writer.WritePropertyName(propertyName);
                serializer.Serialize(writer, value, type?.ToType());
            }
            else
            {
                if (instanceType is not null)
                {
                    writer.WritePropertyName(nameof(DynamicObject.Type));
                    serializer.Serialize(writer, instanceType);
                }

                if (dynamicProperties?.Any() is true)
                {
                    writer.WritePropertyName(nameof(DynamicObject.Properties));

                    writer.WriteStartArray();
                    foreach (var property in dynamicProperties)
                    {
                        writer.WriteStartObject();

                        writer.WritePropertyName(nameof(DynamicProperty.Name));
                        writer.WriteValue(property.Name);

                        writer.WritePropertyName(nameof(Type));
                        serializer.Serialize(writer, CreateTypeInfo(property.Value));

                        writer.WritePropertyName(nameof(DynamicProperty.Value));
                        if (property.Value is null)
                        {
                            writer.WriteNull();
                        }
                        else
                        {
                            serializer.Serialize(writer, property.Value);
                        }

                        writer.WriteEndObject();
                    }

                    writer.WriteEndArray();
                }
            }
        }