-Fixed various multidimensional array bugs

This commit is contained in:
James Newton-King
2012-08-01 23:19:02 +12:00
parent 32dc957880
commit 4e4fdde9c4
6 changed files with 457 additions and 6 deletions
@@ -97,6 +97,99 @@ namespace Newtonsoft.Json.Tests.Serialization
Assert.AreEqual("Handle this!", c[2].ThrowError);
}
[Test]
public void SerializingErrorIn3DArray()
{
ListErrorObject[,,] c = new ListErrorObject[,,]
{
{
{
new ListErrorObject
{
Member = "Value1",
ThrowError = "Handle this!",
Member2 = "Member1"
},
new ListErrorObject
{
Member = "Value2",
Member2 = "Member2"
},
new ListErrorObject
{
Member = "Value3",
ThrowError = "Handle that!",
Member2 = "Member3"
}
},
{
new ListErrorObject
{
Member = "Value1",
ThrowError = "Handle this!",
Member2 = "Member1"
},
new ListErrorObject
{
Member = "Value2",
Member2 = "Member2"
},
new ListErrorObject
{
Member = "Value3",
ThrowError = "Handle that!",
Member2 = "Member3"
}
}
}
};
string json = JsonConvert.SerializeObject(c, new JsonSerializerSettings
{
Formatting = Formatting.Indented,
Error = (s, e) =>
{
if (e.CurrentObject.GetType().IsArray)
e.ErrorContext.Handled = true;
}
});
Assert.AreEqual(@"[
[
[
{
""Member"": ""Value1"",
""ThrowError"": ""Handle this!"",
""Member2"": ""Member1""
},
{
""Member"": ""Value2""
},
{
""Member"": ""Value3"",
""ThrowError"": ""Handle that!"",
""Member2"": ""Member3""
}
],
[
{
""Member"": ""Value1"",
""ThrowError"": ""Handle this!"",
""Member2"": ""Member1""
},
{
""Member"": ""Value2""
},
{
""Member"": ""Value3"",
""ThrowError"": ""Handle that!"",
""Member2"": ""Member3""
}
]
]
]", json);
}
[Test]
public void SerializingErrorInChildObject()
{
@@ -339,6 +432,27 @@ namespace Newtonsoft.Json.Tests.Serialization
Assert.AreEqual("[1] - 1 - Could not convert string to integer: b. Path '[1]', line 1, position 8.", errors[1]);
}
[Test]
public void HandlingMultidimensionalArrayErrors()
{
string json = "[[\"a\",\"45\"],[\"b\",34]]";
List<string> errors = new List<string>();
JsonSerializer serializer = new JsonSerializer();
serializer.Error += delegate(object sender, ErrorEventArgs args)
{
errors.Add(args.ErrorContext.Path + " - " + args.ErrorContext.Member + " - " + args.ErrorContext.Error.Message);
args.ErrorContext.Handled = true;
};
serializer.Deserialize(new JsonTextReader(new StringReader(json)), typeof(int[,]));
Assert.AreEqual(2, errors.Count);
Assert.AreEqual("[0][0] - 0 - Could not convert string to integer: a. Path '[0][0]', line 1, position 5.", errors[0]);
Assert.AreEqual("[1][0] - 0 - Could not convert string to integer: b. Path '[1][0]', line 1, position 16.", errors[1]);
}
[Test]
public void ErrorHandlingAndAvoidingRecursiveDepthError()
{