From cb89be7aac3c1031d85f0c1db0ebb65ba9b197b2 Mon Sep 17 00:00:00 2001 From: John Wesley Walker III <81404201+jww3@users.noreply.github.com> Date: Mon, 27 Feb 2023 16:38:45 +0000 Subject: [PATCH] Account for DataContractSerializer vagaries. --- src/Sdk/DTWebApi/WebApi/Issue.cs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/Sdk/DTWebApi/WebApi/Issue.cs b/src/Sdk/DTWebApi/WebApi/Issue.cs index 337103d3d..d5ce09492 100644 --- a/src/Sdk/DTWebApi/WebApi/Issue.cs +++ b/src/Sdk/DTWebApi/WebApi/Issue.cs @@ -25,7 +25,8 @@ namespace GitHub.DistributedTask.WebApi private Issue(Issue original) { - m_data = new Dictionary(StringComparer.OrdinalIgnoreCase); + // DataContractSerializer bypasses all constructor logic and inline initialization! + this.EnsureInitialized(); if (original != null) { this.Type = original.Type; @@ -86,6 +87,7 @@ namespace GitHub.DistributedTask.WebApi private void OnDeserialized(StreamingContext context) { SerializationHelper.Copy(ref m_serializedData, ref m_data, StringComparer.OrdinalIgnoreCase, true); + this.EnsureInitialized(); } [OnSerializing] @@ -104,5 +106,10 @@ namespace GitHub.DistributedTask.WebApi private IDictionary m_serializedData; private IDictionary m_data; + + private void EnsureInitialized() + { + m_data = m_data ?? new Dictionary(StringComparer.OrdinalIgnoreCase); + } } }