diff --git a/src/Stripe.net/Infrastructure/Public/StripeConfiguration.cs b/src/Stripe.net/Infrastructure/Public/StripeConfiguration.cs index 38550309a1..033b06ee56 100644 --- a/src/Stripe.net/Infrastructure/Public/StripeConfiguration.cs +++ b/src/Stripe.net/Infrastructure/Public/StripeConfiguration.cs @@ -225,6 +225,7 @@ internal static JsonSerializerSettings DefaultSerializerSettings(ApiRequestor re new StripeObjectConverter(), }, DateParseHandling = DateParseHandling.None, + MetadataPropertyHandling = MetadataPropertyHandling.Ignore, MaxDepth = 128, }; } diff --git a/src/StripeTests/Entities/_base/StripeEntityTest.cs b/src/StripeTests/Entities/_base/StripeEntityTest.cs index 3a125686ba..bd237d5a4b 100644 --- a/src/StripeTests/Entities/_base/StripeEntityTest.cs +++ b/src/StripeTests/Entities/_base/StripeEntityTest.cs @@ -1,6 +1,7 @@ namespace StripeTests { using System; + using System.Collections.Generic; using System.Globalization; using Newtonsoft.Json; @@ -72,6 +73,20 @@ public void FromJsonGeneric() Assert.Equal("String!", o.String); } + [Fact] + public void FromJsonDollarRefInMetadata() + { + var json = "{\"integer\": 234, \"string\": \"String!\", \"metadata\": { \"$ref\": \"1\", \"foo\": \"bar\" }}"; + + var o = StripeEntity.FromJson(json); + + Assert.NotNull(o); + Assert.Equal(234, o.Integer); + Assert.Equal("String!", o.String); + Assert.Equal("1", o.Metadata["$ref"]); + Assert.Equal("bar", o.Metadata["foo"]); + } + [Fact] public void ToJson() { @@ -79,11 +94,12 @@ public void ToJson() { Integer = 234, String = "String!", + Metadata = new Dictionary() { { "foo", "bar" } }, }; var json = o.ToJson().Replace("\r\n", "\n"); - var expectedJson = "{\n \"integer\": 234,\n \"string\": \"String!\",\n \"nested\": null\n}"; + var expectedJson = "{\n \"integer\": 234,\n \"string\": \"String!\",\n \"metadata\": {\n \"foo\": \"bar\"\n },\n \"nested\": null\n}"; Assert.Equal(expectedJson, json); } @@ -181,7 +197,7 @@ public void RawJObject() subscription.RawJObject["items"]["data"][0]["id"]); } - private class TestEntity : StripeEntity + private class TestEntity : StripeEntity, IHasMetadata { [JsonProperty("integer")] public int Integer { get; set; } @@ -189,6 +205,9 @@ private class TestEntity : StripeEntity [JsonProperty("string")] public string String { get; set; } + [JsonProperty("metadata")] + public Dictionary Metadata { get; set; } + [JsonIgnore] public string NestedId {