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