/// <summary> /// Writes the value expression to the buffer. /// </summary> /// <param name="buffer">The buffer</param> /// <param name="valueExpression">The value expression</param> private static void WriteValueExpressionToBuffer(StringBuilder buffer, JTokenExpression valueExpression) { ExpressionSerializer.ValidateValueExpression(valueExpression: valueExpression); var value = ExpressionSerializer.GetValueFromValueExpression(valueExpression: valueExpression); switch (value.Type) { case JTokenType.Integer: // Note(majastrz): Integers are serialized as-is buffer.Append(value: value); return; case JTokenType.String: WriteEscapedStringLiteral(buffer, value.ToString()); return; default: // Note(majastrz): JTokenValue can only be created with string or int value. throw new InvalidOperationException($"JTokenExpression has a value of unexpected type '{value.Type}'."); } }
/// <summary> /// Validates the specified value expression. Does not perform recursive validation. /// </summary> /// <param name="valueExpression">The value expression</param> private static void ValidateValueExpression(JTokenExpression valueExpression) { ExpressionSerializer.ValidateExpression(expression: valueExpression); }
/// <summary> /// Gets a value from the value expression. /// </summary> /// <param name="valueExpression">The value expression</param> private static JToken GetValueFromValueExpression(JTokenExpression valueExpression) { // Note(majastrz): EvaluateExpression on JTokenExpression just returns the value and does not use the context at all. // The constructor of JTokenExpression does not allow you to create one with a null value, so we don't really need to check return(valueExpression.Value); }