diff --git a/Doc/versions.txt b/Doc/versions.txt index d19fc5cb..01888bf7 100644 --- a/Doc/versions.txt +++ b/Doc/versions.txt @@ -6,7 +6,7 @@ Json.NET comes in different versions for the various .NET frameworks. .NET latest (4.0) -DotNet35: - .NET 3.5, Mono + .NET 3.5 SP1, Mono -DotNet20: .NET 2.0 diff --git a/Src/Newtonsoft.Json.Tests/Converters/IsoDateTimeConverterTests.cs b/Src/Newtonsoft.Json.Tests/Converters/IsoDateTimeConverterTests.cs index 2424c0e0..5dbb8c27 100644 --- a/Src/Newtonsoft.Json.Tests/Converters/IsoDateTimeConverterTests.cs +++ b/Src/Newtonsoft.Json.Tests/Converters/IsoDateTimeConverterTests.cs @@ -272,8 +272,16 @@ namespace Newtonsoft.Json.Tests.Converters c.DateTimeField = new DateTime(2008, 1, 1, 1, 1, 1, 0, DateTimeKind.Utc); string json2 = JsonConvert.SerializeObject(c, new IsoDateTimeConverter() { DateTimeStyles = DateTimeStyles.AssumeUniversal }); + TimeSpan offset; + +#if SILVERLIGHT + offset = TimeZoneInfo.Local.GetUtcOffset(localDateTime); +#else + offset = TimeZone.CurrentTimeZone.GetUtcOffset(localDateTime); +#endif + // if the current timezone is utc then local already equals utc - if (TimeZone.CurrentTimeZone.GetUtcOffset(localDateTime) == TimeSpan.Zero) + if (offset == TimeSpan.Zero) Assert.AreEqual(json, json2); else Assert.AreNotEqual(json, json2); diff --git a/Src/Newtonsoft.Json.Tests/Linq/JPathTests.cs b/Src/Newtonsoft.Json.Tests/Linq/JPathTests.cs index 4ac9c06d..1d699a59 100644 --- a/Src/Newtonsoft.Json.Tests/Linq/JPathTests.cs +++ b/Src/Newtonsoft.Json.Tests/Linq/JPathTests.cs @@ -243,6 +243,15 @@ namespace Newtonsoft.Json.Tests.Linq Assert.AreEqual(3, (int)t); } + [Test] + public void EvaluateLastSingleCharacterProperty() + { + JObject o2 = JObject.Parse("{'People':[{'N':'Jeff'}]}"); + string a2 = (string)o2.SelectToken("People[0].N"); + + Assert.AreEqual("Jeff", a2); + } + [Test] public void Example() { diff --git a/Src/Newtonsoft.Json.Tests/Serialization/TypeNameHandlingTests.cs b/Src/Newtonsoft.Json.Tests/Serialization/TypeNameHandlingTests.cs index 50d67fae..9344d767 100644 --- a/Src/Newtonsoft.Json.Tests/Serialization/TypeNameHandlingTests.cs +++ b/Src/Newtonsoft.Json.Tests/Serialization/TypeNameHandlingTests.cs @@ -594,28 +594,30 @@ namespace Newtonsoft.Json.Tests.Serialization TypeNameAssemblyFormat = FormatterAssemblyStyle.Simple }); + string urlStatusTypeName = ReflectionUtils.GetTypeName(typeof (UrlStatus), FormatterAssemblyStyle.Simple); + Assert.AreEqual(@"{ ""$type"": ""System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Object, mscorlib]], mscorlib"", ""First"": { - ""$type"": ""Newtonsoft.Json.Tests.Serialization.TypeNameHandlingTests+UrlStatus, Newtonsoft.Json.Tests"", + ""$type"": """ + urlStatusTypeName + @""", ""Status"": 404, ""Url"": ""http://www.bing.com"" }, ""Second"": { - ""$type"": ""Newtonsoft.Json.Tests.Serialization.TypeNameHandlingTests+UrlStatus, Newtonsoft.Json.Tests"", + ""$type"": """ + urlStatusTypeName + @""", ""Status"": 400, ""Url"": ""http://www.google.com"" }, ""List"": { - ""$type"": ""System.Collections.Generic.List`1[[Newtonsoft.Json.Tests.Serialization.TypeNameHandlingTests+UrlStatus, Newtonsoft.Json.Tests]], mscorlib"", + ""$type"": ""System.Collections.Generic.List`1[[" + urlStatusTypeName + @"]], mscorlib"", ""$values"": [ { - ""$type"": ""Newtonsoft.Json.Tests.Serialization.TypeNameHandlingTests+UrlStatus, Newtonsoft.Json.Tests"", + ""$type"": """ + urlStatusTypeName + @""", ""Status"": 300, ""Url"": ""http://www.yahoo.com"" }, { - ""$type"": ""Newtonsoft.Json.Tests.Serialization.TypeNameHandlingTests+UrlStatus, Newtonsoft.Json.Tests"", + ""$type"": """ + urlStatusTypeName + @""", ""Status"": 200, ""Url"": ""http://www.askjeeves.com"" } diff --git a/Src/Newtonsoft.Json/Bson/BsonReader.cs b/Src/Newtonsoft.Json/Bson/BsonReader.cs index deca6e7e..2628cfe7 100644 --- a/Src/Newtonsoft.Json/Bson/BsonReader.cs +++ b/Src/Newtonsoft.Json/Bson/BsonReader.cs @@ -165,7 +165,7 @@ namespace Newtonsoft.Json.Bson return null; if (TokenType == JsonToken.Integer || TokenType == JsonToken.Float) { - SetToken(JsonToken.Float, Convert.ToDecimal(Value)); + SetToken(JsonToken.Float, Convert.ToDecimal(Value, CultureInfo.InvariantCulture)); return (decimal)Value; } diff --git a/Src/Newtonsoft.Json/JsonTextReader.cs b/Src/Newtonsoft.Json/JsonTextReader.cs index 7f13a326..5c43fa26 100644 --- a/Src/Newtonsoft.Json/JsonTextReader.cs +++ b/Src/Newtonsoft.Json/JsonTextReader.cs @@ -744,7 +744,7 @@ namespace Newtonsoft.Json } else { - numberValue = decimal.Parse(number, NumberStyles.Number | NumberStyles.AllowExponent); + numberValue = decimal.Parse(number, NumberStyles.Number | NumberStyles.AllowExponent, CultureInfo.InvariantCulture); } numberType = JsonToken.Float; diff --git a/Src/Newtonsoft.Json/Linq/JPath.cs b/Src/Newtonsoft.Json/Linq/JPath.cs index 0b1b3e37..c0279b90 100644 --- a/Src/Newtonsoft.Json/Linq/JPath.cs +++ b/Src/Newtonsoft.Json/Linq/JPath.cs @@ -65,7 +65,7 @@ namespace Newtonsoft.Json.Linq _currentIndex++; } - if (_currentIndex - 1 > currentPartStartIndex) + if (_currentIndex > currentPartStartIndex) { string member = _expression.Substring(currentPartStartIndex, _currentIndex - currentPartStartIndex); Parts.Add(member); diff --git a/Src/Newtonsoft.Json/Linq/JTokenReader.cs b/Src/Newtonsoft.Json/Linq/JTokenReader.cs index 1e7bf8e1..f70f6f11 100644 --- a/Src/Newtonsoft.Json/Linq/JTokenReader.cs +++ b/Src/Newtonsoft.Json/Linq/JTokenReader.cs @@ -66,7 +66,7 @@ namespace Newtonsoft.Json.Linq return null; if (TokenType == JsonToken.Integer || TokenType == JsonToken.Float) { - SetToken(JsonToken.Float, Convert.ToDecimal(Value)); + SetToken(JsonToken.Float, Convert.ToDecimal(Value, CultureInfo.InvariantCulture)); return (decimal) Value; } diff --git a/Src/Newtonsoft.Json/Newtonsoft.Json.Net35.csproj b/Src/Newtonsoft.Json/Newtonsoft.Json.Net35.csproj index 585b88aa..7d922ee0 100644 --- a/Src/Newtonsoft.Json/Newtonsoft.Json.Net35.csproj +++ b/Src/Newtonsoft.Json/Newtonsoft.Json.Net35.csproj @@ -67,6 +67,7 @@ 4 bin\Release\DotNet35\Newtonsoft.Json.Net35.xml AllRules.ruleset + true diff --git a/Src/Newtonsoft.Json/Serialization/DefaultContractResolver.cs b/Src/Newtonsoft.Json/Serialization/DefaultContractResolver.cs index 676acbd2..b840b5a0 100644 --- a/Src/Newtonsoft.Json/Serialization/DefaultContractResolver.cs +++ b/Src/Newtonsoft.Json/Serialization/DefaultContractResolver.cs @@ -305,6 +305,9 @@ namespace Newtonsoft.Json.Serialization return JsonTypeReflector.ReflectionDelegateFactory.CreateDefaultConstructor(createdType); } +#if !PocketPC && !NET20 + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Portability", "CA1903:UseOnlyApiFromTargetedFramework", MessageId = "System.Runtime.Serialization.DataContractAttribute.#get_IsReference()")] +#endif private void InitializeContract(JsonContract contract) { JsonContainerAttribute containerAttribute = JsonTypeReflector.GetJsonContainerAttribute(contract.UnderlyingType); diff --git a/Src/Newtonsoft.Json/Serialization/JsonSerializerInternalWriter.cs b/Src/Newtonsoft.Json/Serialization/JsonSerializerInternalWriter.cs index fa25fb05..526d94b0 100644 --- a/Src/Newtonsoft.Json/Serialization/JsonSerializerInternalWriter.cs +++ b/Src/Newtonsoft.Json/Serialization/JsonSerializerInternalWriter.cs @@ -447,6 +447,7 @@ namespace Newtonsoft.Json.Serialization #if !SILVERLIGHT && !PocketPC #if !NET20 + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Portability", "CA1903:UseOnlyApiFromTargetedFramework", MessageId = "System.Security.SecuritySafeCriticalAttribute")] [SecuritySafeCritical] #endif private void SerializeISerializable(JsonWriter writer, ISerializable value, JsonISerializableContract contract)