private static void WriteExecutionNode(Utf8JsonWriter writer, ExecutionNode node, JsonSerializerOptions options) { if (node is ValueExecutionNode valueExecutionNode) { WriteValue(writer, valueExecutionNode.ToValue(), options); } else if (node is ObjectExecutionNode objectExecutionNode) { if (objectExecutionNode.SubFields == null) { writer.WriteNullValue(); } else { writer.WriteStartObject(); foreach (var childNode in objectExecutionNode.SubFields) { var propertyName = childNode.Name; if (options.PropertyNamingPolicy != null) { propertyName = options.PropertyNamingPolicy.ConvertName(propertyName); } writer.WritePropertyName(propertyName); WriteExecutionNode(writer, childNode, options); } writer.WriteEndObject(); } } else if (node is ArrayExecutionNode arrayExecutionNode) { var items = arrayExecutionNode.Items; if (items == null) { writer.WriteNullValue(); } else { writer.WriteStartArray(); foreach (var childNode in items) { WriteExecutionNode(writer, childNode, options); } writer.WriteEndArray(); } } else if (node == null || node is NullExecutionNode) { writer.WriteNullValue(); } else { WriteValue(writer, node.ToValue(), options); } }
private void WriteExecutionNode(JsonWriter writer, ExecutionNode node, JsonSerializer serializer) { if (node is ValueExecutionNode valueExecutionNode) { serializer.Serialize(writer, valueExecutionNode.ToValue()); } else if (node is ObjectExecutionNode objectExecutionNode) { if (objectExecutionNode.SubFields == null) { writer.WriteNull(); } else { writer.WriteStartObject(); foreach (var childNode in objectExecutionNode.SubFields) { var propName = childNode.Name; if (_namingStrategy != null) { propName = _namingStrategy.GetPropertyName(propName, false); } writer.WritePropertyName(propName); WriteExecutionNode(writer, childNode, serializer); } writer.WriteEndObject(); } } else if (node is ArrayExecutionNode arrayExecutionNode) { var items = arrayExecutionNode.Items; if (items == null) { writer.WriteNull(); } else { writer.WriteStartArray(); foreach (var childNode in items) { WriteExecutionNode(writer, childNode, serializer); } writer.WriteEndArray(); } } else if (node == null || node is NullExecutionNode) { writer.WriteNull(); } else { serializer.Serialize(writer, node.ToValue()); } }