diff --git a/src/SdkCommon/ClientRuntime/ClientRuntime.Tests/JsonSerializationTests.cs b/src/SdkCommon/ClientRuntime/ClientRuntime.Tests/JsonSerializationTests.cs index 2416771ecfcd..f7ee7f699a50 100644 --- a/src/SdkCommon/ClientRuntime/ClientRuntime.Tests/JsonSerializationTests.cs +++ b/src/SdkCommon/ClientRuntime/ClientRuntime.Tests/JsonSerializationTests.cs @@ -533,8 +533,7 @@ private static void TestWithBadJsonSerializerSettings(Action callback) JsonConvert.DefaultSettings = () => new JsonSerializerSettings() { - Converters = new[] { new InvalidJsonConverter() }, - ContractResolver = new InvalidContractResolver() + Converters = new[] { new ModelConverter() } }; try @@ -562,29 +561,72 @@ private class ModelWithConst public int Rating { get; set; } } - private class InvalidContractResolver : IContractResolver + + private class ModelConverter : JsonConverter { - public JsonContract ResolveContract(Type type) + public override bool CanConvert(Type objectType) => objectType == typeof(Model); + + public override object ReadJson( + JsonReader reader, + Type objectType, + object existingValue, + JsonSerializer serializer) { - throw new InvalidOperationException(JsonErrorMessage); + var model = new Model(); + + ExpectAndAdvance(reader, JsonToken.StartObject); + + ExpectProperty(reader, "Name"); + model.Name = reader.ReadAsString().ToUpper(); + reader.Read(); + + ExpectProperty(reader, "Rating"); + model.Rating = reader.ReadAsInt32().Value; + reader.Read(); + + Expect(reader, JsonToken.EndObject); + + return model; } - } - private class InvalidJsonConverter : JsonConverter - { - public override bool CanConvert(Type objectType) + public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) + { + var model = (Model)value; + + writer.WriteStartObject(); + + writer.WritePropertyName("Name"); + writer.WriteValue(model.Name.ToUpper()); + + writer.WritePropertyName("Rating"); + writer.WriteValue(model.Rating); + + writer.WriteEndObject(); + + } + + private static void Expect(JsonReader reader, JsonToken tokenType) { - throw new InvalidOperationException(JsonErrorMessage); + if (reader.TokenType != tokenType) + { + throw new JsonSerializationException($"Found unexpected token: {tokenType}."); + } } - public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) + private static void ExpectAndAdvance(JsonReader reader, JsonToken tokenType) { - throw new InvalidOperationException(JsonErrorMessage); + Expect(reader, tokenType); + reader.Read(); } - public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) + private static void ExpectProperty(JsonReader reader, string name) { - throw new InvalidOperationException(JsonErrorMessage); + Expect(reader, JsonToken.PropertyName); + string propertyName = reader.Value as string; + if (propertyName != name) + { + throw new JsonSerializationException($"Found unexpected property. Expected: {name}. Actual: {propertyName}."); + } } } }