From 42a2b33c9ce17bcdb9e06649f3adc3c6b6cb2617 Mon Sep 17 00:00:00 2001 From: "jack.lewis" Date: Fri, 15 Nov 2024 10:46:44 +0000 Subject: [PATCH] Update to use new dictionary with more specific typing --- .../Serialisation/CustomClassSerializationTests.cs | 12 +++++++++--- .../Deserialisation/CollectionItemConverter.cs | 11 ++++++++--- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/IIIF/IIIF.Tests/Serialisation/CustomClassSerializationTests.cs b/src/IIIF/IIIF.Tests/Serialisation/CustomClassSerializationTests.cs index 44cad16..b3d98e7 100644 --- a/src/IIIF/IIIF.Tests/Serialisation/CustomClassSerializationTests.cs +++ b/src/IIIF/IIIF.Tests/Serialisation/CustomClassSerializationTests.cs @@ -196,10 +196,16 @@ public static class CustomSerializerX settings ??= new(IIIFSerialiserX.DeserializerSettings); settings.Context = new StreamingContext(StreamingContextStates.Other, - new Dictionary> + new Dictionary>> { - { "Collection", p => new CustomCollectionItem() }, - { "CustomItem", p => new CustomItem() } + { + typeof(ICollectionItem), + new Dictionary> + { + { "Collection", _ => new CustomCollectionItem() }, + { "CustomItem", _ => new CustomItem() } + } + } }); var serializer = JsonSerializer.Create(settings); diff --git a/src/IIIF/IIIF/Serialisation/Deserialisation/CollectionItemConverter.cs b/src/IIIF/IIIF/Serialisation/Deserialisation/CollectionItemConverter.cs index 7a9c1a3..f814a9b 100644 --- a/src/IIIF/IIIF/Serialisation/Deserialisation/CollectionItemConverter.cs +++ b/src/IIIF/IIIF/Serialisation/Deserialisation/CollectionItemConverter.cs @@ -16,10 +16,15 @@ public class CollectionItemConverter : ReadOnlyConverter ICollectionItem collectionItem = null; // Look for consumer-provided mapping - if (serializer.Context.Context is IDictionary> customMappings - && customMappings.TryGetValue(type, out var customMapping)) + if (serializer.Context.Context is IDictionary>> ctx) { - collectionItem = customMapping(jsonObject); + if (ctx.TryGetValue(typeof(ICollectionItem), out var customMappings)) + { + if (customMappings.TryGetValue(type, out var customMapping)) + { + collectionItem = (ICollectionItem) customMapping(jsonObject); + } + } } if (collectionItem == null)