From b30e1a178b106580d928a541821120281a3b89ab Mon Sep 17 00:00:00 2001 From: James Newton-King Date: Wed, 30 Sep 2015 15:38:33 +1300 Subject: [PATCH] -Fixed JsonConvert.PopulateObject error with starting comment --- Src/Newtonsoft.Json.Tests/JsonConvertTest.cs | 58 +++++++++++++++++++ .../JsonSerializerInternalReader.cs | 9 ++- 2 files changed, 65 insertions(+), 2 deletions(-) diff --git a/Src/Newtonsoft.Json.Tests/JsonConvertTest.cs b/Src/Newtonsoft.Json.Tests/JsonConvertTest.cs index d811cc99..eb2576f3 100644 --- a/Src/Newtonsoft.Json.Tests/JsonConvertTest.cs +++ b/Src/Newtonsoft.Json.Tests/JsonConvertTest.cs @@ -60,6 +60,64 @@ namespace Newtonsoft.Json.Tests [TestFixture] public class JsonConvertTest : TestFixtureBase { + public class PopulateTestObject + { + public decimal Prop { get; set; } + } + + [Test] + public void PopulateObjectWithHeaderComment() + { + string json = @"// file header +{ + ""prop"": 1.0 +}"; + + PopulateTestObject o = new PopulateTestObject(); + JsonConvert.PopulateObject(json, o); + + Assert.AreEqual(1m, o.Prop); + } + + [Test] + public void PopulateObjectWithMultipleHeaderComment() + { + string json = @"// file header +// another file header? +{ + ""prop"": 1.0 +}"; + + PopulateTestObject o = new PopulateTestObject(); + JsonConvert.PopulateObject(json, o); + + Assert.AreEqual(1m, o.Prop); + } + + [Test] + public void PopulateObjectWithNoContent() + { + ExceptionAssert.Throws(() => + { + string json = @""; + + PopulateTestObject o = new PopulateTestObject(); + JsonConvert.PopulateObject(json, o); + }, "No JSON content found. Path '', line 0, position 0."); + } + + [Test] + public void PopulateObjectWithOnlyComment() + { + ExceptionAssert.Throws(() => + { + string json = @"// file header"; + + PopulateTestObject o = new PopulateTestObject(); + JsonConvert.PopulateObject(json, o); + }, "No JSON content found. Path '', line 1, position 14."); + } + [Test] public void DefaultSettings() { diff --git a/Src/Newtonsoft.Json/Serialization/JsonSerializerInternalReader.cs b/Src/Newtonsoft.Json/Serialization/JsonSerializerInternalReader.cs index 76578a47..eef3bfcf 100644 --- a/Src/Newtonsoft.Json/Serialization/JsonSerializerInternalReader.cs +++ b/Src/Newtonsoft.Json/Serialization/JsonSerializerInternalReader.cs @@ -70,8 +70,13 @@ namespace Newtonsoft.Json.Serialization JsonContract contract = Serializer._contractResolver.ResolveContract(objectType); - if (reader.TokenType == JsonToken.None) - reader.Read(); + while (reader.TokenType == JsonToken.None || reader.TokenType == JsonToken.Comment) + { + if (!reader.Read()) + { + throw JsonSerializationException.Create(reader, "No JSON content found."); + } + } if (reader.TokenType == JsonToken.StartArray) {