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); } }
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); }
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); }
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(); } } }