Exemple #1
0
        /// <inheritdoc/>
        public override void Write(Utf8JsonWriter writer, ValidationProblemDetails value, JsonSerializerOptions options)
        {
            writer.WriteStartObject();
            ProblemDetailsJsonConverter.WriteProblemDetails(writer, value, options);

            writer.WriteStartObject(_errors);

            if (value.Errors != null)
            {
                foreach (var kvp in value.Errors)
                {
                    writer.WritePropertyName(options.PropertyNamingPolicy?.ConvertName(kvp.Key) ?? kvp.Key);
                    JsonSerializer.Serialize(writer, kvp.Value, kvp.Value?.GetType() ?? typeof(object), options);
                }
            }

            writer.WriteEndObject();

            writer.WriteEndObject();
        }
Exemple #2
0
        /// <inheritdoc/>
        public override ValidationProblemDetails Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
        {
            // ValidationProblemDetails is immutable for the errors dictionary, but we know it uses by-ref so create
            // a mutable dictionary that will be populated below.
            var errors         = new Dictionary <string, IEnumerable <string> >();
            var problemDetails = new ValidationProblemDetails(errors);

            if (reader.TokenType != JsonTokenType.StartObject)
            {
                throw new JsonException("Unexpected end when reading JSON.");
            }

            while (reader.Read() && reader.TokenType != JsonTokenType.EndObject)
            {
                if (reader.ValueTextEquals(_errors.EncodedUtf8Bytes))
                {
                    var readErrors = JsonSerializer.Deserialize <Dictionary <string, string[]> >(ref reader, options);

                    foreach (var item in readErrors)
                    {
                        errors[item.Key] = item.Value;
                    }
                }
                else
                {
                    ProblemDetailsJsonConverter.ReadValue(ref reader, problemDetails, options);
                }
            }

            if (reader.TokenType != JsonTokenType.EndObject)
            {
                throw new JsonException("Unexpected end when reading JSON.");
            }

            return(problemDetails);
        }