Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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}.");
}
}
}
}
Expand Down