using XFEExtension.NetCore.Exceptions; namespace XFEExtension.NetCore.XFETransform.Json; /// /// JSON 语法或转换错误的详细信息。 /// public sealed record XFEJsonError { /// /// 错误消息。 /// public required string Message { get; init; } /// /// JSON 路径。 /// public required string Path { get; init; } /// /// 错误字符在源文本中的零基偏移量;非文本错误为 -1。 /// public required int Position { get; init; } /// /// 一基行号;非文本错误为 0。 /// public required int LineNumber { get; init; } /// /// 一基列号;非文本错误为 0。 /// public required int ColumnNumber { get; init; } } /// /// XFE JSON 语法、序列化或反序列化异常。 /// public class XFEJsonException : XFEExtensionException { /// /// 错误详情。 /// public XFEJsonError Error { get; } /// /// JSON 路径。 /// public string Path => Error.Path; /// /// 错误字符偏移量。 /// public int Position => Error.Position; /// /// 错误行号。 /// public int LineNumber => Error.LineNumber; /// /// 错误列号。 /// public int ColumnNumber => Error.ColumnNumber; internal XFEJsonException(XFEJsonError error) : base(FormatMessage(error)) { Error = error; } internal XFEJsonException(XFEJsonError error, Exception innerException) : base(FormatMessage(error), innerException) { Error = error; } private static string FormatMessage(XFEJsonError error) { var location = error.Position < 0 ? string.Empty : $"(位置 {error.Position},行 {error.LineNumber},列 {error.ColumnNumber})"; return $"{error.Message} 路径:{error.Path}{location}"; } } /// /// JSON 值类型。 /// public enum XFEJsonValueKind { /// /// 尚未确定。 /// Undefined, /// /// JSON 对象。 /// Object, /// /// JSON 数组。 /// Array, /// /// JSON 字符串。 /// String, /// /// JSON 数字。 /// Number, /// /// true。 /// True, /// /// false。 /// False, /// /// null。 /// Null }