Пример #1
0
        internal static JsonReaderException Create(
            IJsonLineInfo?lineInfo,
            string path,
            string message,
            Exception?ex
            )
        {
            message = JsonPosition.FormatMessage(lineInfo, path, message);

            int lineNumber;
            int linePosition;

            if (lineInfo != null && lineInfo.HasLineInfo())
            {
                lineNumber   = lineInfo.LineNumber;
                linePosition = lineInfo.LinePosition;
            }
            else
            {
                lineNumber   = 0;
                linePosition = 0;
            }

            return(new JsonReaderException(message, path, lineNumber, linePosition, ex));
        }
Пример #2
0
        internal static string FormatMessage(IJsonLineInfo?lineInfo, string path, string message)
        {
            // don't add a fullstop and space when message ends with a new line
            if (!message.EndsWith(Environment.NewLine, StringComparison.Ordinal))
            {
                message = message.Trim();

                if (!message.EndsWith('.'))
                {
                    message += ".";
                }

                message += " ";
            }

            message += "Path '{0}'".FormatWith(CultureInfo.InvariantCulture, path);

            if (lineInfo != null && lineInfo.HasLineInfo())
            {
                message += ", line {0}, position {1}".FormatWith(CultureInfo.InvariantCulture, lineInfo.LineNumber, lineInfo.LinePosition);
            }

            message += ".";

            return(message);
        }
Пример #3
0
            static String FormatMessage(IJsonLineInfo?maybeAvailableLineInfo, String path, String message)
            {
                if (!message.EndsWith(Environment.NewLine, StringComparison.Ordinal))
                {
                    message = message.Trim();

                    if (!message.EndsWith(".", StringComparison.Ordinal))
                    {
                        message += ".";
                    }

                    message += " ";
                }

                message += String.Format(CultureInfo.InvariantCulture, "Path '{0}'", path);

                if (maybeAvailableLineInfo is { } lineInfo&& lineInfo.HasLineInfo())
                {
                    message += String.Format(
                        CultureInfo.InvariantCulture,
                        ", line {0}, position {1}",
                        maybeAvailableLineInfo.LineNumber,
                        maybeAvailableLineInfo.LinePosition
                        );
                }

                message += ".";

                return(message);
            }
Пример #4
0
        protected bool IsErrorHandled(
            object?currentObject,
            JsonContract?contract,
            object?keyValue,
            IJsonLineInfo?lineInfo,
            string path,
            Exception ex
            )
        {
            ErrorContext errorContext = GetErrorContext(currentObject, keyValue, path, ex);

            if (
                TraceWriter != null &&
                TraceWriter.LevelFilter >= TraceLevel.Error &&
                !errorContext.Traced
                )
            {
                // only write error once
                errorContext.Traced = true;

                // kind of a hack but meh. might clean this up later
                string message =
                    (GetType() == typeof(JsonSerializerInternalWriter))
                        ? "Error serializing"
                        : "Error deserializing";
                if (contract != null)
                {
                    message += " " + contract.UnderlyingType;
                }
                message += ". " + ex.Message;

                // add line information to non-json.net exception message
                if (!(ex is JsonException))
                {
                    message = JsonPosition.FormatMessage(lineInfo, path, message);
                }

                TraceWriter.Trace(TraceLevel.Error, message, ex);
            }

            // attribute method is non-static so don't invoke if no object
            if (contract != null && currentObject != null)
            {
                contract.InvokeOnError(currentObject, Serializer.Context, errorContext);
            }

            if (!errorContext.Handled)
            {
                Serializer.OnError(new ErrorEventArgs(currentObject, errorContext));
            }

            return(errorContext.Handled);
        }
        internal static string FormatMessage(IJsonLineInfo?lineInfo, string?path, StringBuilder message)
        {
            message.TrimEnd();

            if (message[message.Length - 1] != '.')
            {
                message.Append('.');
            }

            if (path == null && (lineInfo == null || !lineInfo.HasLineInfo()))
            {
                return(message.ToString());
            }

            message.Append(' ');

            if (path != null)
            {
                message.Append("Path '");
                message.Append(path);
                message.Append('\'');

                if (lineInfo != null && lineInfo.HasLineInfo())
                {
                    message.Append(", line ");
                    message.Append(lineInfo.LineNumber);
                    message.Append(", position ");
                    message.Append(lineInfo.LinePosition);
                }
            }
            else
            {
                ValidationUtils.Assert(lineInfo != null);

                message.Append("Line ");
                message.Append(lineInfo.LineNumber);
                message.Append(", position ");
                message.Append(lineInfo.LinePosition);
            }

            message.Append('.');
            return(message.ToString());
        }
        internal static JSchemaReaderException Create(IJsonLineInfo?lineInfo, Uri?baseUri, string?path, string message, Exception?ex)
        {
            message = FormatMessage(lineInfo, path, message);

            int lineNumber;
            int linePosition;

            if (lineInfo != null && lineInfo.HasLineInfo())
            {
                lineNumber   = lineInfo.LineNumber;
                linePosition = lineInfo.LinePosition;
            }
            else
            {
                lineNumber   = 0;
                linePosition = 0;
            }

            return(new JSchemaReaderException(message, ex, path, lineNumber, linePosition, baseUri));
        }
Пример #7
0
        private async Task ReadContentFromAsync(JsonReader reader, JsonLoadSettings?settings, CancellationToken cancellationToken = default)
        {
            IJsonLineInfo?lineInfo = reader as IJsonLineInfo;

            JContainer?parent = this;

            do
            {
                if (parent is JProperty p && p.Value != null)
                {
                    if (parent == this)
                    {
                        return;
                    }

                    parent = parent.Parent;
                }

                MiscellaneousUtils.Assert(parent != null);

                switch (reader.TokenType)
                {
                case JsonToken.None:
                    // new reader. move to actual content
                    break;

                case JsonToken.StartArray:
                    JArray a = new JArray();
                    a.SetLineInfo(lineInfo, settings);
                    parent.Add(a);
                    parent = a;
                    break;

                case JsonToken.EndArray:
                    if (parent == this)
                    {
                        return;
                    }

                    parent = parent.Parent;
                    break;

                case JsonToken.StartObject:
                    JObject o = new JObject();
                    o.SetLineInfo(lineInfo, settings);
                    parent.Add(o);
                    parent = o;
                    break;

                case JsonToken.EndObject:
                    if (parent == this)
                    {
                        return;
                    }

                    parent = parent.Parent;
                    break;

                case JsonToken.StartConstructor:
                    JConstructor constructor = new JConstructor(reader.Value !.ToString());
                    constructor.SetLineInfo(lineInfo, settings);
                    parent.Add(constructor);
                    parent = constructor;
                    break;

                case JsonToken.EndConstructor:
                    if (parent == this)
                    {
                        return;
                    }

                    parent = parent.Parent;
                    break;

                case JsonToken.String:
                case JsonToken.Integer:
                case JsonToken.Float:
                case JsonToken.Date:
                case JsonToken.Boolean:
                case JsonToken.Bytes:
                    JValue v = new JValue(reader.Value);
                    v.SetLineInfo(lineInfo, settings);
                    parent.Add(v);
                    break;

                case JsonToken.Comment:
                    if (settings != null && settings.CommentHandling == CommentHandling.Load)
                    {
                        v = JValue.CreateComment(reader.Value !.ToString());
                        v.SetLineInfo(lineInfo, settings);
                        parent.Add(v);
                    }
                    break;

                case JsonToken.Null:
                    v = JValue.CreateNull();
                    v.SetLineInfo(lineInfo, settings);
                    parent.Add(v);
                    break;

                case JsonToken.Undefined:
                    v = JValue.CreateUndefined();
                    v.SetLineInfo(lineInfo, settings);
                    parent.Add(v);
                    break;

                case JsonToken.PropertyName:
                    JProperty?property = ReadProperty(reader, settings, lineInfo, parent);
                    if (property != null)
                    {
                        parent = property;
                    }
                    else
                    {
                        await reader.SkipAsync().ConfigureAwait(false);
                    }
                    break;

                default:
                    throw new InvalidOperationException("The JsonReader should not be on a token of type {0}.".FormatWith(CultureInfo.InvariantCulture, reader.TokenType));
                }
            } while (await reader.ReadAsync(cancellationToken).ConfigureAwait(false));
        }
 internal static string FormatMessage(IJsonLineInfo?lineInfo, string?path, string message)
 {
     return(FormatMessage(lineInfo, path, new StringBuilder(message)));
 }
        protected ValidationError CreateError(IFormattable message, ErrorType errorType, JSchema schema, object?value, IList <ValidationError>?childErrors, IJsonLineInfo?lineInfo, string path)
        {
            ValidationError error = ValidationError.CreateValidationError(message, errorType, schema, null, value, childErrors, lineInfo, path);

            return(error);
        }
 internal static JSchemaReaderException Create(IJsonLineInfo?lineInfo, Uri?baseUri, string?path, string message)
 {
     return(Create(lineInfo, baseUri, path, message, null));
 }
Пример #11
0
        // based on
        // https://github.com/JamesNK/Newtonsoft.Json/blob/febdb8188b226ee7810bbf7e053ada171818fbeb/Src/Newtonsoft.Json/JsonReaderException.cs
        // https://github.com/JamesNK/Newtonsoft.Json/blob/6360cc4c4b4a45f7a82ad6c060cddd9cdb3c7d02/Src/Newtonsoft.Json/JsonPosition.cs
        //
        // Copyright (c) 2007 James Newton-King

        public static JsonReaderException ReaderException
            (IJsonLineInfo?maybeLineInfo,
            String path,
            String message,
            Exception?innerException = null)
        {
        internal static ValidationError CreateValidationError(IFormattable message, ErrorType errorType, JSchema schema, Uri?schemaId, object?value, IList <ValidationError>?childErrors, IJsonLineInfo?lineInfo, string path)
        {
            ValidationError error = new ValidationError();

            error._formattable = message;
            error._childErrors = childErrors;

            error.ErrorType = errorType;
            error.Path      = path;
            if (lineInfo != null)
            {
                error.LineNumber   = lineInfo.LineNumber;
                error.LinePosition = lineInfo.LinePosition;
            }
            error.Schema        = schema;
            error.SchemaId      = schemaId;
            error.SchemaBaseUri = schema.BaseUri;
            error.Value         = value;
            return(error);
        }