diff --git a/RevenueCat/Scripts/Offering.cs b/RevenueCat/Scripts/Offering.cs index bff3c815..c01925b5 100644 --- a/RevenueCat/Scripts/Offering.cs +++ b/RevenueCat/Scripts/Offering.cs @@ -70,8 +70,10 @@ public Offering(JSONNode response) Metadata = new Dictionary(); if (response["metadata"] != null && !response["metadata"].IsNull) { - foreach(var metadataEntry in response["metadata"]) { - Metadata.Add(metadataEntry.Key, metadataEntry.Value); + foreach(var metadataEntry in response["metadata"]) + { + object value = ParseJsonValue(metadataEntry.Value); + Metadata.Add(metadataEntry.Key, value); } } } @@ -90,5 +92,34 @@ public override string ToString() $"{nameof(Monthly)}: {Monthly}\n" + $"{nameof(Weekly)}: {Weekly}"; } + + private object ParseJsonValue(JSONNode jsonValue) + { + if (jsonValue.IsString) return jsonValue.Value; + if (jsonValue.IsNumber) return jsonValue.AsFloat; + if (jsonValue.IsBoolean) return jsonValue.AsBool; + + if (jsonValue.IsObject) + { + var dict = new Dictionary(); + foreach (var kvp in jsonValue.AsObject) + { + dict[kvp.Key] = ParseJsonValue(kvp.Value); + } + return dict; + } + + if (jsonValue.IsArray) + { + var list = new List(); + foreach (var item in jsonValue.AsArray) + { + list.Add(ParseJsonValue(item)); + } + return list; + } + + return null; + } } } \ No newline at end of file