Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/Newtonsoft.Json.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJamesNK <james@newtonking.com>2011-08-03 04:50:44 +0400
committerJamesNK <james@newtonking.com>2011-08-03 04:50:44 +0400
commit44ab7f71dfcb4e07b6c1bf59241673a7054a5132 (patch)
treed9bf5077738ca7dfa6cb61fa6143c66753b88ddc
parent18c9400054ea6581beaa4db9beaba08291bb6826 (diff)
-Fixed DataTable and DataColumn names not being modified by CamelCasePropertyNamesContractResolver
-rw-r--r--Src/Newtonsoft.Json.Tests/Bson/BsonReaderTests.cs49
-rw-r--r--Src/Newtonsoft.Json.Tests/Converters/DataSetConverterTests.cs47
-rw-r--r--Src/Newtonsoft.Json.Tests/Properties/AssemblyInfo.cs2
-rw-r--r--Src/Newtonsoft.Json/Bson/BsonReader.cs2
-rw-r--r--Src/Newtonsoft.Json/Converters/DataSetConverter.cs4
-rw-r--r--Src/Newtonsoft.Json/Converters/DataTableConverter.cs4
-rw-r--r--Src/Newtonsoft.Json/Properties/AssemblyInfo.cs2
-rw-r--r--Src/Newtonsoft.Json/Serialization/CamelCasePropertyNamesContractResolver.cs2
-rw-r--r--Src/Newtonsoft.Json/Serialization/DefaultContractResolver.cs2
-rw-r--r--Src/Newtonsoft.Json/Serialization/JsonSerializerInternalReader.cs2
10 files changed, 106 insertions, 10 deletions
diff --git a/Src/Newtonsoft.Json.Tests/Bson/BsonReaderTests.cs b/Src/Newtonsoft.Json.Tests/Bson/BsonReaderTests.cs
index a5c3c1d..7548052 100644
--- a/Src/Newtonsoft.Json.Tests/Bson/BsonReaderTests.cs
+++ b/Src/Newtonsoft.Json.Tests/Bson/BsonReaderTests.cs
@@ -801,7 +801,54 @@ namespace Newtonsoft.Json.Tests.Bson
reader = new BsonReader(new MemoryStream(bson), false, DateTimeKind.Unspecified);
o = (JObject)JToken.ReadFrom(reader);
- Assert.AreEqual(DateTime.SpecifyKind(value.ToLocalTime(), DateTimeKind.Unspecified), (DateTime)o["DateTime"]);
+ Assert.AreEqual(DateTime.SpecifyKind(value, DateTimeKind.Unspecified), (DateTime)o["DateTime"]);
+ }
+
+ [Test]
+ public void UnspecifiedDateTimeKindHandling()
+ {
+ DateTime value = new DateTime(2000, 1, 1, 0, 0, 0, DateTimeKind.Unspecified);
+
+ MemoryStream ms = new MemoryStream();
+ BsonWriter writer = new BsonWriter(ms);
+ writer.DateTimeKindHandling = DateTimeKind.Unspecified;
+
+ writer.WriteStartObject();
+ writer.WritePropertyName("DateTime");
+ writer.WriteValue(value);
+ writer.WriteEndObject();
+
+ byte[] bson = ms.ToArray();
+
+ JObject o;
+ BsonReader reader;
+
+ reader = new BsonReader(new MemoryStream(bson), false, DateTimeKind.Unspecified);
+ o = (JObject)JToken.ReadFrom(reader);
+ Assert.AreEqual(value, (DateTime)o["DateTime"]);
+ }
+
+ [Test]
+ public void LocalDateTimeKindHandling()
+ {
+ DateTime value = new DateTime(2000, 1, 1, 0, 0, 0, DateTimeKind.Local);
+
+ MemoryStream ms = new MemoryStream();
+ BsonWriter writer = new BsonWriter(ms);
+
+ writer.WriteStartObject();
+ writer.WritePropertyName("DateTime");
+ writer.WriteValue(value);
+ writer.WriteEndObject();
+
+ byte[] bson = ms.ToArray();
+
+ JObject o;
+ BsonReader reader;
+
+ reader = new BsonReader(new MemoryStream(bson), false, DateTimeKind.Local);
+ o = (JObject)JToken.ReadFrom(reader);
+ Assert.AreEqual(value, (DateTime)o["DateTime"]);
}
private string WriteAndReadStringValue(string val)
diff --git a/Src/Newtonsoft.Json.Tests/Converters/DataSetConverterTests.cs b/Src/Newtonsoft.Json.Tests/Converters/DataSetConverterTests.cs
index 14f1ef1..058072b 100644
--- a/Src/Newtonsoft.Json.Tests/Converters/DataSetConverterTests.cs
+++ b/Src/Newtonsoft.Json.Tests/Converters/DataSetConverterTests.cs
@@ -5,6 +5,7 @@ using System.Linq;
using System.Text;
using Newtonsoft.Json.Converters;
using NUnit.Framework;
+using Newtonsoft.Json.Serialization;
using Newtonsoft.Json.Tests.TestObjects;
using System.Data;
@@ -251,7 +252,51 @@ namespace Newtonsoft.Json.Tests.Converters
}
[Test]
- public void Blah()
+ public void SerializeWithCamelCaseResolver()
+ {
+ DataSet ds = new DataSet();
+ ds.Tables.Add(CreateDataTable("FirstTable", 2));
+ ds.Tables.Add(CreateDataTable("SecondTable", 1));
+
+ string json = JsonConvert.SerializeObject(ds, Formatting.Indented, new JsonSerializerSettings
+ {
+ ContractResolver = new CamelCasePropertyNamesContractResolver()
+ });
+
+ Assert.AreEqual(@"{
+ ""firstTable"": [
+ {
+ ""stringCol"": ""Item Name"",
+ ""int32Col"": 1,
+ ""booleanCol"": true,
+ ""timeSpanCol"": ""10.22:10:15.1000000"",
+ ""dateTimeCol"": ""\/Date(978048000000)\/"",
+ ""decimalCol"": 64.0021
+ },
+ {
+ ""stringCol"": ""Item Name"",
+ ""int32Col"": 2,
+ ""booleanCol"": true,
+ ""timeSpanCol"": ""10.22:10:15.1000000"",
+ ""dateTimeCol"": ""\/Date(978048000000)\/"",
+ ""decimalCol"": 64.0021
+ }
+ ],
+ ""secondTable"": [
+ {
+ ""stringCol"": ""Item Name"",
+ ""int32Col"": 1,
+ ""booleanCol"": true,
+ ""timeSpanCol"": ""10.22:10:15.1000000"",
+ ""dateTimeCol"": ""\/Date(978048000000)\/"",
+ ""decimalCol"": 64.0021
+ }
+ ]
+}", json);
+ }
+
+ [Test]
+ public void SerializeDataSetProperty()
{
DataSet ds = new DataSet();
ds.Tables.Add(CreateDataTable("FirstTable", 2));
diff --git a/Src/Newtonsoft.Json.Tests/Properties/AssemblyInfo.cs b/Src/Newtonsoft.Json.Tests/Properties/AssemblyInfo.cs
index cef54af..eb1028f 100644
--- a/Src/Newtonsoft.Json.Tests/Properties/AssemblyInfo.cs
+++ b/Src/Newtonsoft.Json.Tests/Properties/AssemblyInfo.cs
@@ -41,5 +41,5 @@ using System.Runtime.InteropServices;
// by using the '*' as shown below:
[assembly: AssemblyVersion("4.0.2.0")]
#if !PocketPC
-[assembly: AssemblyFileVersion("4.0.2.14002")]
+[assembly: AssemblyFileVersion("4.0.2.14003")]
#endif
diff --git a/Src/Newtonsoft.Json/Bson/BsonReader.cs b/Src/Newtonsoft.Json/Bson/BsonReader.cs
index 83ad3cb..25d19d2 100644
--- a/Src/Newtonsoft.Json/Bson/BsonReader.cs
+++ b/Src/Newtonsoft.Json/Bson/BsonReader.cs
@@ -501,7 +501,7 @@ namespace Newtonsoft.Json.Bson
switch (DateTimeKindHandling)
{
case DateTimeKind.Unspecified:
- dateTime = DateTime.SpecifyKind(utcDateTime.ToLocalTime(), DateTimeKind.Unspecified);
+ dateTime = DateTime.SpecifyKind(utcDateTime, DateTimeKind.Unspecified);
break;
case DateTimeKind.Local:
dateTime = utcDateTime.ToLocalTime();
diff --git a/Src/Newtonsoft.Json/Converters/DataSetConverter.cs b/Src/Newtonsoft.Json/Converters/DataSetConverter.cs
index b4fd9d5..af97e70 100644
--- a/Src/Newtonsoft.Json/Converters/DataSetConverter.cs
+++ b/Src/Newtonsoft.Json/Converters/DataSetConverter.cs
@@ -26,6 +26,7 @@
#if !SILVERLIGHT
using System;
using System.Data;
+using Newtonsoft.Json.Serialization;
namespace Newtonsoft.Json.Converters
{
@@ -43,6 +44,7 @@ namespace Newtonsoft.Json.Converters
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
DataSet dataSet = (DataSet)value;
+ DefaultContractResolver resolver = serializer.ContractResolver as DefaultContractResolver;
DataTableConverter converter = new DataTableConverter();
@@ -50,7 +52,7 @@ namespace Newtonsoft.Json.Converters
foreach (DataTable table in dataSet.Tables)
{
- writer.WritePropertyName(table.TableName);
+ writer.WritePropertyName((resolver != null) ? resolver.ResolvePropertyName(table.TableName) : table.TableName);
converter.WriteJson(writer, table, serializer);
}
diff --git a/Src/Newtonsoft.Json/Converters/DataTableConverter.cs b/Src/Newtonsoft.Json/Converters/DataTableConverter.cs
index 5ea4c5f..eee6399 100644
--- a/Src/Newtonsoft.Json/Converters/DataTableConverter.cs
+++ b/Src/Newtonsoft.Json/Converters/DataTableConverter.cs
@@ -26,6 +26,7 @@
#if !SILVERLIGHT
using System;
using System.Data;
+using Newtonsoft.Json.Serialization;
namespace Newtonsoft.Json.Converters
{
@@ -43,6 +44,7 @@ namespace Newtonsoft.Json.Converters
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
DataTable table = (DataTable)value;
+ DefaultContractResolver resolver = serializer.ContractResolver as DefaultContractResolver;
writer.WriteStartArray();
@@ -51,7 +53,7 @@ namespace Newtonsoft.Json.Converters
writer.WriteStartObject();
foreach (DataColumn column in row.Table.Columns)
{
- writer.WritePropertyName(column.ColumnName);
+ writer.WritePropertyName((resolver != null) ? resolver.ResolvePropertyName(column.ColumnName) : column.ColumnName);
serializer.Serialize(writer, row[column]);
}
writer.WriteEndObject();
diff --git a/Src/Newtonsoft.Json/Properties/AssemblyInfo.cs b/Src/Newtonsoft.Json/Properties/AssemblyInfo.cs
index a1c9d63..819cd7c 100644
--- a/Src/Newtonsoft.Json/Properties/AssemblyInfo.cs
+++ b/Src/Newtonsoft.Json/Properties/AssemblyInfo.cs
@@ -110,7 +110,7 @@ using System.Security;
// by using the '*' as shown below:
[assembly: AssemblyVersion("4.0.2.0")]
#if !PocketPC
-[assembly: AssemblyFileVersion("4.0.2.14002")]
+[assembly: AssemblyFileVersion("4.0.2.14003")]
#endif
[assembly: CLSCompliant(true)]
diff --git a/Src/Newtonsoft.Json/Serialization/CamelCasePropertyNamesContractResolver.cs b/Src/Newtonsoft.Json/Serialization/CamelCasePropertyNamesContractResolver.cs
index f035bb7..868a2e7 100644
--- a/Src/Newtonsoft.Json/Serialization/CamelCasePropertyNamesContractResolver.cs
+++ b/Src/Newtonsoft.Json/Serialization/CamelCasePropertyNamesContractResolver.cs
@@ -46,7 +46,7 @@ namespace Newtonsoft.Json.Serialization
/// </summary>
/// <param name="propertyName">Name of the property.</param>
/// <returns>The property name camel cased.</returns>
- protected override string ResolvePropertyName(string propertyName)
+ protected internal override string ResolvePropertyName(string propertyName)
{
// lower case the first letter of the passed in name
return StringUtils.ToCamelCase(propertyName);
diff --git a/Src/Newtonsoft.Json/Serialization/DefaultContractResolver.cs b/Src/Newtonsoft.Json/Serialization/DefaultContractResolver.cs
index 48e028c..887bf4a 100644
--- a/Src/Newtonsoft.Json/Serialization/DefaultContractResolver.cs
+++ b/Src/Newtonsoft.Json/Serialization/DefaultContractResolver.cs
@@ -920,7 +920,7 @@ namespace Newtonsoft.Json.Serialization
/// </summary>
/// <param name="propertyName">Name of the property.</param>
/// <returns>Name of the property.</returns>
- protected virtual string ResolvePropertyName(string propertyName)
+ protected internal virtual string ResolvePropertyName(string propertyName)
{
return propertyName;
}
diff --git a/Src/Newtonsoft.Json/Serialization/JsonSerializerInternalReader.cs b/Src/Newtonsoft.Json/Serialization/JsonSerializerInternalReader.cs
index 9d08567..98ad5ed 100644
--- a/Src/Newtonsoft.Json/Serialization/JsonSerializerInternalReader.cs
+++ b/Src/Newtonsoft.Json/Serialization/JsonSerializerInternalReader.cs
@@ -792,7 +792,7 @@ namespace Newtonsoft.Json.Serialization
} while (!exit && reader.Read());
if (contract.ISerializableCreator == null)
- throw new JsonSerializationException("ISerializable type '{0}' does not have a valid constructor.".FormatWith(CultureInfo.InvariantCulture, objectType));
+ throw new JsonSerializationException("ISerializable type '{0}' does not have a valid constructor. To correctly implement ISerializable a constructor that takes SerializationInfo and StreamingContext parameters should be present.".FormatWith(CultureInfo.InvariantCulture, objectType));
object createdObject = contract.ISerializableCreator(serializationInfo, Serializer.Context);