public override object ReadJson()

in client/ClientDecisionServiceTest/RawStringConverter.cs [24:120]


        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            var sb = new StringBuilder();
            JsonToken previousToken = JsonToken.None;

            int depth = 0;

            do
            {
                if (sb.Length > 0)
                {
                    if (!reader.Read())
                    {
                        break;
                    }

                    if ((previousToken == JsonToken.Boolean
                        || previousToken == JsonToken.Date || previousToken == JsonToken.String
                        || previousToken == JsonToken.Float || previousToken == JsonToken.Integer
                        || previousToken == JsonToken.Raw || previousToken == JsonToken.Null
                        || previousToken == JsonToken.Bytes) &&
                        (reader.TokenType != JsonToken.EndArray && reader.TokenType != JsonToken.EndObject))
                    {
                        sb.Append(",");
                    }
                    else if ((previousToken == JsonToken.EndObject && reader.TokenType == JsonToken.StartObject)
                        || (previousToken == JsonToken.EndArray && reader.TokenType == JsonToken.StartArray))
                    {
                        sb.Append(",");
                    }
                }

                switch (reader.TokenType)
                {
                    case JsonToken.PropertyName:
                        if (previousToken == JsonToken.EndObject || previousToken == JsonToken.EndArray)
                        {
                            sb.Append(',');
                        }

                        sb.AppendFormat(CultureInfo.InvariantCulture, "\"{0}\":", reader.Value);
                        break;

                    case JsonToken.Boolean:
                        sb.AppendFormat((bool)reader.Value ? "true" : "false");
                        break;

                    case JsonToken.Bytes:
                    case JsonToken.Comment:
                    case JsonToken.Integer:
                    case JsonToken.Float:
                        sb.AppendFormat(CultureInfo.InvariantCulture, "{0}", reader.Value);
                        break;

                    case JsonToken.Date:
                        sb.Append(JsonConvert.SerializeObject(reader.Value));
                        break;

                    case JsonToken.Null:
                        sb.Append("null");
                        break;

                    case JsonToken.String:
                        sb.AppendFormat(CultureInfo.InvariantCulture, "\"{0}\"", reader.Value);
                        break;

                    case JsonToken.Raw:
                        sb.Append(reader.Value);
                        break;

                    case JsonToken.StartArray:
                        sb.Append('[');
                        depth++;
                        break;

                    case JsonToken.EndArray:
                        sb.Append(']');
                        depth--;
                        break;

                    case JsonToken.StartObject:
                        sb.Append('{');
                        depth++;
                        break;

                    case JsonToken.EndObject:
                        sb.Append('}');
                        depth--;
                        break;
                }

                previousToken = reader.TokenType;
            }
            while (depth > 0);

            return sb.ToString();
        }