From 092098933e0c10bc9d43334e1a7c78a998a3856e Mon Sep 17 00:00:00 2001 From: James Newton-King Date: Mon, 6 Aug 2018 13:25:26 +1200 Subject: [PATCH] Fix error when deserializing empty array in DataTable (#1786) --- .../Converters/DataTableConverterTests.cs | 17 +++++++++++++++++ .../Converters/DataTableConverter.cs | 1 + 2 files changed, 18 insertions(+) diff --git a/Src/Newtonsoft.Json.Tests/Converters/DataTableConverterTests.cs b/Src/Newtonsoft.Json.Tests/Converters/DataTableConverterTests.cs index 89074bad..61076076 100644 --- a/Src/Newtonsoft.Json.Tests/Converters/DataTableConverterTests.cs +++ b/Src/Newtonsoft.Json.Tests/Converters/DataTableConverterTests.cs @@ -50,6 +50,23 @@ namespace Newtonsoft.Json.Tests.Converters { public class DataTableConverterTests : TestFixtureBase { + [Test] + public void DeserializeEmptyNestedArray() + { + var jsonString2 = @"[{""col1"": []}]"; + + DataTable dt = JsonConvert.DeserializeObject(jsonString2); + + Assert.AreEqual(1, dt.Columns.Count); + Assert.AreEqual(typeof(string[]), dt.Columns["col1"].DataType); + + Assert.AreEqual(1, dt.Rows.Count); + Assert.IsNotNull(dt.Rows[0]["col1"]); + + object[] value = (object[])dt.Rows[0]["col1"]; + Assert.AreEqual(0, value.Length); + } + #if !(NET20 || NET35) [Test] public void SerializeNullValues() diff --git a/Src/Newtonsoft.Json/Converters/DataTableConverter.cs b/Src/Newtonsoft.Json/Converters/DataTableConverter.cs index 794a0f29..5a7f6886 100644 --- a/Src/Newtonsoft.Json/Converters/DataTableConverter.cs +++ b/Src/Newtonsoft.Json/Converters/DataTableConverter.cs @@ -221,6 +221,7 @@ namespace Newtonsoft.Json.Converters return reader.ValueType; case JsonToken.Null: case JsonToken.Undefined: + case JsonToken.EndArray: return typeof(string); case JsonToken.StartArray: reader.ReadAndAssert();