| File: System\Xml\XPath\XPathException.cs | Web Access |
| Project: src\runtime\src\libraries\System.Private.Xml\src\System.Private.Xml.csproj (System.Private.Xml) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System; using System.ComponentModel; using System.Diagnostics; using System.Resources; using System.Runtime.Serialization; namespace System.Xml.XPath { // Represents the exception that is thrown when there is error processing an // XPath expression. [Serializable] [System.Runtime.CompilerServices.TypeForwardedFrom("System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")] public class XPathException : SystemException { // we need to keep this members for V1 serialization compatibility private readonly string _res; private readonly string?[]? _args; // message != null for V1 & V2 exceptions deserialized in Whidbey // message == null for created V2 exceptions; the exception message is stored in Exception._message private readonly string? _message; [Obsolete(Obsoletions.LegacyFormatterImplMessage, DiagnosticId = Obsoletions.LegacyFormatterImplDiagId, UrlFormat = Obsoletions.SharedUrlFormat)] [EditorBrowsable(EditorBrowsableState.Never)] protected XPathException(SerializationInfo info, StreamingContext context) : base(info, context) { _res = (string)info.GetValue("res", typeof(string))!; _args = (string[]?)info.GetValue("args", typeof(string[])); // deserialize optional members string? version = null; foreach (SerializationEntry e in info) { if (e.Name == "version") { version = (string?)e.Value; } } if (version == null) { // deserializing V1 exception _message = CreateMessage(_res, _args); } else { // deserializing V2 or higher exception -> exception message is serialized by the base class (Exception._message) _message = null; } } [Obsolete(Obsoletions.LegacyFormatterImplMessage, DiagnosticId = Obsoletions.LegacyFormatterImplDiagId, UrlFormat = Obsoletions.SharedUrlFormat)] [EditorBrowsable(EditorBrowsableState.Never)] public override void GetObjectData(SerializationInfo info, StreamingContext context) { base.GetObjectData(info, context); info.AddValue("res", _res); info.AddValue("args", _args); info.AddValue("version", "2.0"); } public XPathException() : this(string.Empty, (Exception?)null) { } public XPathException(string? message) : this(message, (Exception?)null) { } public XPathException(string? message, Exception? innerException) : this(SR.Xml_UserException, new string?[] { message }, innerException) { } internal static XPathException Create(string res) { return new XPathException(res, (string[]?)null); } internal static XPathException Create(string res, string arg) { return new XPathException(res, new string[] { arg }); } internal static XPathException Create(string res, string arg, string arg2) { return new XPathException(res, new string[] { arg, arg2 }); } internal static XPathException Create(string res, string arg, Exception innerException) { return new XPathException(res, new string[] { arg }, innerException); } private XPathException(string res, string[]? args) : this(res, args, null) { } private XPathException(string res, string?[]? args, Exception? inner) : base(CreateMessage(res, args), inner) { HResult = HResults.XmlXPath; _res = res; _args = args; } private static string CreateMessage(string res, string?[]? args) { try { string message = args == null ? res : string.Format(res, args); if (message != null) { return message; } } catch (MissingManifestResourceException) { } return $"UNKNOWN({res})"; } public override string Message { get { return _message ?? base.Message; } } } }