From ecdb4f4fb572de65ccb780bcad4a3c174cb430e6 Mon Sep 17 00:00:00 2001 From: Chris Cameron Date: Thu, 9 May 2019 15:18:21 -0400 Subject: [PATCH] feat: AbstractGenericJsonConverter exposes virtual methods for overriding object serialization/deserialization --- .../Json/AbstractGenericJsonConverter.cs | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/ICD.Common.Utils/Json/AbstractGenericJsonConverter.cs b/ICD.Common.Utils/Json/AbstractGenericJsonConverter.cs index e5a84e9..fd51bab 100644 --- a/ICD.Common.Utils/Json/AbstractGenericJsonConverter.cs +++ b/ICD.Common.Utils/Json/AbstractGenericJsonConverter.cs @@ -56,6 +56,17 @@ namespace ICD.Common.Utils.Json return; } + WriteObject(writer, value, serializer); + } + + /// + /// Override to write the object value to the writer. + /// + /// + /// + /// + protected virtual void WriteObject(JsonWriter writer, T value, JsonSerializer serializer) + { writer.WriteStartObject(); { WriteProperties(writer, value, serializer); @@ -119,6 +130,17 @@ namespace ICD.Common.Utils.Json if (reader.TokenType != JsonToken.StartObject) throw new FormatException(string.Format("Expected {0} got {1}", JsonToken.StartObject, reader.TokenType)); + return ReadObject(reader, serializer); + } + + /// + /// Override to handle deserialization of the current StartObject token. + /// + /// + /// + /// + protected virtual T ReadObject(JsonReader reader, JsonSerializer serializer) + { T output = Instantiate(); reader.ReadObject(serializer, (p, r, s) => ReadProperty(p, r, output, s));