From 2b74b89f7655123857c042c008519a1be76a7a20 Mon Sep 17 00:00:00 2001 From: "Jason Shirk (POWERSHELL)" Date: Mon, 1 Aug 2016 13:57:57 -0700 Subject: [PATCH] Add serialization support for SemanticVersion --- .../engine/SerializationStrings.cs | 5 ++ .../engine/serialization.cs | 50 ++++++++++++++++++- 2 files changed, 54 insertions(+), 1 deletion(-) diff --git a/src/System.Management.Automation/engine/SerializationStrings.cs b/src/System.Management.Automation/engine/SerializationStrings.cs index 92e1494bd..4e3bfb304 100644 --- a/src/System.Management.Automation/engine/SerializationStrings.cs +++ b/src/System.Management.Automation/engine/SerializationStrings.cs @@ -235,6 +235,11 @@ namespace System.Management.Automation /// internal const string VersionTag = "Version"; + /// + /// Element tag for SemanticVersion property + /// + internal const string SemanticVersionTag = "SemanticVersion"; + /// /// Element tag for XmlDocument /// diff --git a/src/System.Management.Automation/engine/serialization.cs b/src/System.Management.Automation/engine/serialization.cs index 14097f465..d3fbfdf37 100644 --- a/src/System.Management.Automation/engine/serialization.cs +++ b/src/System.Management.Automation/engine/serialization.cs @@ -2464,6 +2464,24 @@ namespace System.Management.Automation WriteRawString(serializer, streamName, property, Convert.ToString(source, CultureInfo.InvariantCulture), entry); } + /// + /// Writes SemanticVersion + /// + /// The serializer to which the object is serialized. + /// + /// name of property. pass null for item + /// Version to write + /// serialization information about source + internal static void WriteSemanticVersion(InternalSerializer serializer, string streamName, string property, object source, TypeSerializationInfo entry) + { + Dbg.Assert(serializer != null, "caller should have validated the information"); + Dbg.Assert(source != null, "caller should have validated the information"); + Dbg.Assert(source is SemanticVersion, "Caller should verify that typeof(source) is Version"); + Dbg.Assert(entry != null, "caller should have validated the information"); + + WriteRawString(serializer, streamName, property, Convert.ToString(source, CultureInfo.InvariantCulture), entry); + } + /// /// Serialize scriptblock as item or property /// @@ -4210,6 +4228,29 @@ namespace System.Management.Automation throw deserializer.NewXmlException(Serialization.InvalidPrimitiveType, recognizedException, typeof(Version).FullName); } + internal static object DeserializeSemanticVersion(InternalDeserializer deserializer) + { + Dbg.Assert(deserializer != null, "Caller should validate the parameter"); + Exception recognizedException = null; + try + { + return new SemanticVersion(deserializer._reader.ReadElementContentAsString()); + } + catch (ArgumentException e) + { + recognizedException = e; + } + catch (FormatException e) + { + recognizedException = e; + } + catch (OverflowException e) + { + recognizedException = e; + } + throw deserializer.NewXmlException(Serialization.InvalidPrimitiveType, recognizedException, typeof(Version).FullName); + } + internal static object DeserializeInt16(InternalDeserializer deserializer) { Dbg.Assert(deserializer != null, "Caller should validate the parameter"); @@ -5149,6 +5190,13 @@ namespace System.Management.Automation SerializationStrings.VersionTag, InternalSerializer.WriteVersion, InternalDeserializer.DeserializeVersion), + + new TypeSerializationInfo(typeof(SemanticVersion), + SerializationStrings.SemanticVersionTag, + SerializationStrings.SemanticVersionTag, + InternalSerializer.WriteSemanticVersion, + InternalDeserializer.DeserializeSemanticVersion), + s_xdInfo, new TypeSerializationInfo(typeof(ProgressRecord), @@ -5162,7 +5210,7 @@ namespace System.Management.Automation SerializationStrings.SecureStringTag, InternalSerializer.WriteSecureString, InternalDeserializer.DeserializeSecureString), -}; + }; /// /// Hashtable of knowntypes.