Beispiel #1
0
            private void WriteEscapedString(string value)
            {
                // Escape the string if needed
                string escapedString;

                if (!value.Any(character => JsonTextWriter.CharacterNeedsEscaping(character)))
                {
                    // No escaping needed;
                    escapedString = value;
                }
                else
                {
                    StringBuilder stringBuilder = new StringBuilder();
                    int           readOffset    = 0;
                    while (readOffset != value.Length)
                    {
                        if (!this.RequiresEscapeSequence(value[readOffset]))
                        {
                            // Just write the character as is
                            stringBuilder.Append(value[readOffset++]);
                        }
                        else
                        {
                            char characterToEscape = value[readOffset++];
                            char escapeSequence    = default;
                            switch (characterToEscape)
                            {
                            case '\\':
                                escapeSequence = '\\';
                                break;

                            case '"':
                                escapeSequence = '"';
                                break;

                            case '/':
                                escapeSequence = '/';
                                break;

                            case '\b':
                                escapeSequence = 'b';
                                break;

                            case '\f':
                                escapeSequence = 'f';
                                break;

                            case '\n':
                                escapeSequence = 'n';
                                break;

                            case '\r':
                                escapeSequence = 'r';
                                break;

                            case '\t':
                                escapeSequence = 't';
                                break;
                            }

                            if (escapeSequence >= ' ')
                            {
                                // We got a special character
                                stringBuilder.Append('\\');
                                stringBuilder.Append(escapeSequence);
                            }
                            else
                            {
                                // We got a control character (U+0000 through U+001F).
                                stringBuilder.AppendFormat(
                                    CultureInfo.InvariantCulture,
                                    "\\u{0:X4}",
                                    (int)characterToEscape);
                            }
                        }
                    }

                    escapedString = stringBuilder.ToString();
                }

                // Convert to UTF8
                byte[] utf8String = Encoding.UTF8.GetBytes(escapedString);
                this.jsonTextMemoryWriter.Write(utf8String);
            }