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)); }
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); }
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); }
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)); }
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)); }
// 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); }