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-11-19 11:04:38 +0400
committerJamesNK <james@newtonking.com>2011-11-19 11:04:38 +0400
commit69594a690f658f5caa0f3828707604e4e9797bf2 (patch)
treee756aec923c18d32e3894c5afd9a051a1ef9c5d8 /Src/Newtonsoft.Json.Tests
parent9ef17d05a3613aca5889a6f6b2bde7ab2556d494 (diff)
-Fixed DataTableConverter including nulls with NullValueHandling.Ignore
Diffstat (limited to 'Src/Newtonsoft.Json.Tests')
-rw-r--r--Src/Newtonsoft.Json.Tests/Converters/DataTableConverterTests.cs20
-rw-r--r--Src/Newtonsoft.Json.Tests/Serialization/TypeNameHandlingTests.cs111
2 files changed, 131 insertions, 0 deletions
diff --git a/Src/Newtonsoft.Json.Tests/Converters/DataTableConverterTests.cs b/Src/Newtonsoft.Json.Tests/Converters/DataTableConverterTests.cs
index dcc9381..0a614e2 100644
--- a/Src/Newtonsoft.Json.Tests/Converters/DataTableConverterTests.cs
+++ b/Src/Newtonsoft.Json.Tests/Converters/DataTableConverterTests.cs
@@ -155,6 +155,26 @@ namespace Newtonsoft.Json.Tests.Converters
}
[Test]
+ public void SerializeDataTableWithNullAndIgnoreNullHandling()
+ {
+ var table = new DataTable();
+ table.Columns.Add("item");
+ table.Columns.Add("price", typeof(double));
+ table.Rows.Add("shirt", 49.99);
+ table.Rows.Add("pants", 54.99);
+ table.Rows.Add("shoes"); // no price
+
+ var json = JsonConvert.SerializeObject(table, Formatting.None, new JsonSerializerSettings
+ {
+ NullValueHandling = NullValueHandling.Ignore
+ });
+ Assert.AreEqual(@"["
+ + @"{""item"":""shirt"",""price"":49.99},"
+ + @"{""item"":""pants"",""price"":54.99},"
+ + @"{""item"":""shoes""}]", json);
+ }
+
+ [Test]
public void DerializeDataTableWithImplicitNull()
{
const string json = @"["
diff --git a/Src/Newtonsoft.Json.Tests/Serialization/TypeNameHandlingTests.cs b/Src/Newtonsoft.Json.Tests/Serialization/TypeNameHandlingTests.cs
index 6419380..92b77b5 100644
--- a/Src/Newtonsoft.Json.Tests/Serialization/TypeNameHandlingTests.cs
+++ b/Src/Newtonsoft.Json.Tests/Serialization/TypeNameHandlingTests.cs
@@ -881,6 +881,55 @@ namespace Newtonsoft.Json.Tests.Serialization
Assert.AreEqual(data, obj.Objects[0]);
}
+
+#if !(WINDOWS_PHONE || SILVERLIGHT)
+ [Test]
+ public void ISerializableTypeNameHandlingTest()
+ {
+ //Create an instance of our example type
+ IExample e = new Example("Rob");
+
+ SerializableWrapper w = new SerializableWrapper
+ {
+ Content = e
+ };
+
+ //Test Binary Serialization Round Trip
+ //This will work find because the Binary Formatter serializes type names
+ //this.TestBinarySerializationRoundTrip(e);
+
+ //Test Json Serialization
+ //This fails because the JsonSerializer doesn't serialize type names correctly for ISerializable objects
+ //Type Names should be serialized for All, Auto and Object modes
+ this.TestJsonSerializationRoundTrip(w, TypeNameHandling.All);
+ this.TestJsonSerializationRoundTrip(w, TypeNameHandling.Auto);
+ this.TestJsonSerializationRoundTrip(w, TypeNameHandling.Objects);
+ }
+
+ private void TestJsonSerializationRoundTrip(SerializableWrapper e, TypeNameHandling flag)
+ {
+ Console.WriteLine("Type Name Handling: " + flag.ToString());
+ StringWriter writer = new StringWriter();
+
+ //Create our serializer and set Type Name Handling appropriately
+ JsonSerializer serializer = new JsonSerializer();
+ serializer.TypeNameHandling = flag;
+
+ //Do the actual serialization and dump to Console for inspection
+ serializer.Serialize(new JsonTextWriter(writer), e);
+ Console.WriteLine(writer.ToString());
+ Console.WriteLine();
+
+ //Now try to deserialize
+ //Json.Net will cause an error here as it will try and instantiate
+ //the interface directly because it failed to respect the
+ //TypeNameHandling property on serialization
+ SerializableWrapper f = serializer.Deserialize<SerializableWrapper>(new JsonTextReader(new StringReader(writer.ToString())));
+
+ //Check Round Trip
+ Assert.AreEqual(e, f, "Objects should be equal after round trip json serialization");
+ }
+#endif
}
public class Message
@@ -896,4 +945,66 @@ namespace Newtonsoft.Json.Tests.Serialization
public string Query { get; set; }
public string Language { get; set; }
}
+
+#if !(WINDOWS_PHONE || SILVERLIGHT)
+ public class SerializableWrapper
+ {
+ public object Content { get; set; }
+
+ public override bool Equals(object obj)
+ {
+ SerializableWrapper w = obj as SerializableWrapper;
+
+ if (w == null)
+ return false;
+
+ return Equals(w.Content, Content);
+ }
+ }
+
+ public interface IExample
+ : ISerializable
+ {
+ String Name
+ {
+ get;
+ }
+ }
+
+ [Serializable]
+ public class Example
+ : IExample
+ {
+ public Example(String name)
+ {
+ this.Name = name;
+ }
+
+ protected Example(SerializationInfo info, StreamingContext context)
+ {
+ this.Name = info.GetString("name");
+ }
+
+ public void GetObjectData(SerializationInfo info, StreamingContext context)
+ {
+ info.AddValue("name", this.Name);
+ }
+
+ public String Name { get; set; }
+
+ public override bool Equals(object obj)
+ {
+ if (obj == null) return false;
+ if (ReferenceEquals(this, obj)) return true;
+ if (obj is IExample)
+ {
+ return this.Name.Equals(((IExample)obj).Name);
+ }
+ else
+ {
+ return false;
+ }
+ }
+ }
+#endif
} \ No newline at end of file