From d01cdda3e1550319a52cbe7776bae0eed590bd42 Mon Sep 17 00:00:00 2001 From: Viktor Hofer Date: Fri, 6 Oct 2017 20:15:29 +0200 Subject: [PATCH] Make ContractException serializable --- .../src/System/Diagnostics/Contracts/Contracts.cs | 1 + .../System/Diagnostics/Contracts/ContractsBCL.cs | 32 ++++++++++++++++------ 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/src/mscorlib/src/System/Diagnostics/Contracts/Contracts.cs b/src/mscorlib/src/System/Diagnostics/Contracts/Contracts.cs index 5b74f60..dc1dcb6 100644 --- a/src/mscorlib/src/System/Diagnostics/Contracts/Contracts.cs +++ b/src/mscorlib/src/System/Diagnostics/Contracts/Contracts.cs @@ -774,6 +774,7 @@ namespace System.Diagnostics.Contracts #endregion } + [System.Runtime.CompilerServices.TypeForwardedFrom("mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")] public enum ContractFailureKind { Precondition, diff --git a/src/mscorlib/src/System/Diagnostics/Contracts/ContractsBCL.cs b/src/mscorlib/src/System/Diagnostics/Contracts/ContractsBCL.cs index e4bbe1d..c28d243 100644 --- a/src/mscorlib/src/System/Diagnostics/Contracts/ContractsBCL.cs +++ b/src/mscorlib/src/System/Diagnostics/Contracts/ContractsBCL.cs @@ -186,20 +186,22 @@ namespace System.Diagnostics.Contracts } [SuppressMessage("Microsoft.Design", "CA1064:ExceptionsShouldBePublic")] + [Serializable] + [System.Runtime.CompilerServices.TypeForwardedFrom("mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")] internal sealed class ContractException : Exception { - private readonly ContractFailureKind _Kind; - private readonly string _UserMessage; - private readonly string _Condition; + private readonly ContractFailureKind _kind; + private readonly string _userMessage; + private readonly string _condition; [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - public ContractFailureKind Kind { get { return _Kind; } } + public ContractFailureKind Kind { get { return _kind; } } [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] public string Failure { get { return this.Message; } } [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - public string UserMessage { get { return _UserMessage; } } + public string UserMessage { get { return _userMessage; } } [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - public string Condition { get { return _Condition; } } + public string Condition { get { return _condition; } } // Called by COM Interop, if we see COR_E_CODECONTRACTFAILED as an HRESULT. private ContractException() @@ -211,14 +213,26 @@ namespace System.Diagnostics.Contracts : base(failure, innerException) { HResult = System.Runtime.CompilerServices.ContractHelper.COR_E_CODECONTRACTFAILED; - _Kind = kind; - _UserMessage = userMessage; - _Condition = condition; + _kind = kind; + _userMessage = userMessage; + _condition = condition; } + private ContractException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) + : base(info, context) + { + _kind = (ContractFailureKind)info.GetInt32("Kind"); + _userMessage = info.GetString("UserMessage"); + _condition = info.GetString("Condition"); + } + + public override void GetObjectData(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) { base.GetObjectData(info, context); + info.AddValue("Kind", _kind); + info.AddValue("UserMessage", _userMessage); + info.AddValue("Condition", _condition); } } } -- 2.7.4