/DotNet/ThirdParty/Json45r10/Source/Src/Newtonsoft.Json.Tests/Serialization/JsonSerializerTest.cs
C# | 7562 lines | 6792 code | 636 blank | 134 comment | 76 complexity | 74b9f69467d0e48aa820dc0d93bae23c MD5 | raw file
Possible License(s): Apache-2.0, CC-BY-SA-3.0, LGPL-2.1
Large files files are truncated, but you can click here to view the full file
- #region License
- // Copyright (c) 2007 James Newton-King
- //
- // Permission is hereby granted, free of charge, to any person
- // obtaining a copy of this software and associated documentation
- // files (the "Software"), to deal in the Software without
- // restriction, including without limitation the rights to use,
- // copy, modify, merge, publish, distribute, sublicense, and/or sell
- // copies of the Software, and to permit persons to whom the
- // Software is furnished to do so, subject to the following
- // conditions:
- //
- // The above copyright notice and this permission notice shall be
- // included in all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
- // OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
- // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- // WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- // OTHER DEALINGS IN THE SOFTWARE.
- #endregion
- using System;
- #if !(NET35 || NET20 || SILVERLIGHT || WINDOWS_PHONE)
- using System.Collections.Concurrent;
- #endif
- using System.Collections.Generic;
- #if !SILVERLIGHT && !PocketPC && !NET20 && !NETFX_CORE
- using System.ComponentModel.DataAnnotations;
- using System.Configuration;
- using System.Runtime.CompilerServices;
- using System.Runtime.Serialization.Formatters;
- using System.Threading;
- using System.Web.Script.Serialization;
- #endif
- using System.Text;
- #if !NETFX_CORE
- using NUnit.Framework;
- #else
- using Microsoft.VisualStudio.TestPlatform.UnitTestFramework;
- using TestFixture = Microsoft.VisualStudio.TestPlatform.UnitTestFramework.TestClassAttribute;
- using Test = Microsoft.VisualStudio.TestPlatform.UnitTestFramework.TestMethodAttribute;
- #endif
- using Newtonsoft.Json;
- using System.IO;
- using System.Collections;
- using System.Xml;
- using System.Xml.Serialization;
- using System.Collections.ObjectModel;
- using Newtonsoft.Json.Bson;
- using Newtonsoft.Json.Linq;
- using Newtonsoft.Json.Converters;
- #if !PocketPC && !NET20 && !WINDOWS_PHONE
- using System.Runtime.Serialization.Json;
- #endif
- using Newtonsoft.Json.Serialization;
- using Newtonsoft.Json.Tests.Linq;
- using Newtonsoft.Json.Tests.TestObjects;
- using System.Runtime.Serialization;
- using System.Globalization;
- using Newtonsoft.Json.Utilities;
- using System.Reflection;
- #if !NET20 && !SILVERLIGHT
- using System.Xml.Linq;
- using System.Text.RegularExpressions;
- using System.Collections.Specialized;
- using System.Linq.Expressions;
- #endif
- #if !(NET35 || NET20 || WINDOWS_PHONE)
- using System.Dynamic;
- using System.ComponentModel;
- #endif
- #if NET20
- using Newtonsoft.Json.Utilities.LinqBridge;
- #else
- using System.Linq;
- #endif
- #if !(SILVERLIGHT || NETFX_CORE)
- using System.Drawing;
- #endif
- namespace Newtonsoft.Json.Tests.Serialization
- {
- [TestFixture]
- public class JsonSerializerTest : TestFixtureBase
- {
- [Test]
- public void PersonTypedObjectDeserialization()
- {
- Store store = new Store();
- string jsonText = JsonConvert.SerializeObject(store);
- Store deserializedStore = (Store)JsonConvert.DeserializeObject(jsonText, typeof(Store));
- Assert.AreEqual(store.Establised, deserializedStore.Establised);
- Assert.AreEqual(store.product.Count, deserializedStore.product.Count);
- Console.WriteLine(jsonText);
- }
- [Test]
- public void TypedObjectDeserialization()
- {
- Product product = new Product();
- product.Name = "Apple";
- product.ExpiryDate = new DateTime(2008, 12, 28);
- product.Price = 3.99M;
- product.Sizes = new string[] { "Small", "Medium", "Large" };
- string output = JsonConvert.SerializeObject(product);
- //{
- // "Name": "Apple",
- // "ExpiryDate": "\/Date(1230375600000+1300)\/",
- // "Price": 3.99,
- // "Sizes": [
- // "Small",
- // "Medium",
- // "Large"
- // ]
- //}
- Product deserializedProduct = (Product)JsonConvert.DeserializeObject(output, typeof(Product));
- Assert.AreEqual("Apple", deserializedProduct.Name);
- Assert.AreEqual(new DateTime(2008, 12, 28), deserializedProduct.ExpiryDate);
- Assert.AreEqual(3.99m, deserializedProduct.Price);
- Assert.AreEqual("Small", deserializedProduct.Sizes[0]);
- Assert.AreEqual("Medium", deserializedProduct.Sizes[1]);
- Assert.AreEqual("Large", deserializedProduct.Sizes[2]);
- }
- //[Test]
- //public void Advanced()
- //{
- // Product product = new Product();
- // product.ExpiryDate = new DateTime(2008, 12, 28);
- // JsonSerializer serializer = new JsonSerializer();
- // serializer.Converters.Add(new JavaScriptDateTimeConverter());
- // serializer.NullValueHandling = NullValueHandling.Ignore;
- // using (StreamWriter sw = new StreamWriter(@"c:\json.txt"))
- // using (JsonWriter writer = new JsonTextWriter(sw))
- // {
- // serializer.Serialize(writer, product);
- // // {"ExpiryDate":new Date(1230375600000),"Price":0}
- // }
- //}
- [Test]
- public void JsonConvertSerializer()
- {
- string value = @"{""Name"":""Orange"", ""Price"":3.99, ""ExpiryDate"":""01/24/2010 12:00:00""}";
- Product p = JsonConvert.DeserializeObject(value, typeof(Product)) as Product;
- Assert.AreEqual("Orange", p.Name);
- Assert.AreEqual(new DateTime(2010, 1, 24, 12, 0, 0), p.ExpiryDate);
- Assert.AreEqual(3.99m, p.Price);
- }
- [Test]
- public void DeserializeJavaScriptDate()
- {
- DateTime dateValue = new DateTime(2010, 3, 30);
- Dictionary<string, object> testDictionary = new Dictionary<string, object>();
- testDictionary["date"] = dateValue;
- string jsonText = JsonConvert.SerializeObject(testDictionary);
- #if !PocketPC && !NET20 && !WINDOWS_PHONE
- MemoryStream ms = new MemoryStream();
- DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(Dictionary<string, object>));
- serializer.WriteObject(ms, testDictionary);
- byte[] data = ms.ToArray();
- string output = Encoding.UTF8.GetString(data, 0, data.Length);
- #endif
- Dictionary<string, object> deserializedDictionary = (Dictionary<string, object>)JsonConvert.DeserializeObject(jsonText, typeof(Dictionary<string, object>));
- DateTime deserializedDate = (DateTime)deserializedDictionary["date"];
- Assert.AreEqual(dateValue, deserializedDate);
- }
- [Test]
- public void TestMethodExecutorObject()
- {
- MethodExecutorObject executorObject = new MethodExecutorObject();
- executorObject.serverClassName = "BanSubs";
- executorObject.serverMethodParams = new object[] { "21321546", "101", "1236", "D:\\1.txt" };
- executorObject.clientGetResultFunction = "ClientBanSubsCB";
- string output = JsonConvert.SerializeObject(executorObject);
- MethodExecutorObject executorObject2 = JsonConvert.DeserializeObject(output, typeof(MethodExecutorObject)) as MethodExecutorObject;
- Assert.AreNotSame(executorObject, executorObject2);
- Assert.AreEqual(executorObject2.serverClassName, "BanSubs");
- Assert.AreEqual(executorObject2.serverMethodParams.Length, 4);
- CustomAssert.Contains(executorObject2.serverMethodParams, "101");
- Assert.AreEqual(executorObject2.clientGetResultFunction, "ClientBanSubsCB");
- }
- #if !SILVERLIGHT && !NETFX_CORE
- [Test]
- public void HashtableDeserialization()
- {
- string value = @"{""Name"":""Orange"", ""Price"":3.99, ""ExpiryDate"":""01/24/2010 12:00:00""}";
- Hashtable p = JsonConvert.DeserializeObject(value, typeof(Hashtable)) as Hashtable;
- Assert.AreEqual("Orange", p["Name"].ToString());
- }
- [Test]
- public void TypedHashtableDeserialization()
- {
- string value = @"{""Name"":""Orange"", ""Hash"":{""ExpiryDate"":""01/24/2010 12:00:00"",""UntypedArray"":[""01/24/2010 12:00:00""]}}";
- TypedSubHashtable p = JsonConvert.DeserializeObject(value, typeof(TypedSubHashtable)) as TypedSubHashtable;
- Assert.AreEqual("01/24/2010 12:00:00", p.Hash["ExpiryDate"].ToString());
- Assert.AreEqual(@"[
- ""01/24/2010 12:00:00""
- ]", p.Hash["UntypedArray"].ToString());
- }
- #endif
- [Test]
- public void SerializeDeserializeGetOnlyProperty()
- {
- string value = JsonConvert.SerializeObject(new GetOnlyPropertyClass());
- GetOnlyPropertyClass c = JsonConvert.DeserializeObject<GetOnlyPropertyClass>(value);
- Assert.AreEqual(c.Field, "Field");
- Assert.AreEqual(c.GetOnlyProperty, "GetOnlyProperty");
- }
- [Test]
- public void SerializeDeserializeSetOnlyProperty()
- {
- string value = JsonConvert.SerializeObject(new SetOnlyPropertyClass());
- SetOnlyPropertyClass c = JsonConvert.DeserializeObject<SetOnlyPropertyClass>(value);
- Assert.AreEqual(c.Field, "Field");
- }
- [Test]
- public void JsonIgnoreAttributeTest()
- {
- string json = JsonConvert.SerializeObject(new JsonIgnoreAttributeTestClass());
- Assert.AreEqual(@"{""Field"":0,""Property"":21}", json);
- JsonIgnoreAttributeTestClass c = JsonConvert.DeserializeObject<JsonIgnoreAttributeTestClass>(@"{""Field"":99,""Property"":-1,""IgnoredField"":-1,""IgnoredObject"":[1,2,3,4,5]}");
- Assert.AreEqual(0, c.IgnoredField);
- Assert.AreEqual(99, c.Field);
- }
- [Test]
- public void GoogleSearchAPI()
- {
- string json = @"{
- results:
- [
- {
- GsearchResultClass:""GwebSearch"",
- unescapedUrl : ""http://www.google.com/"",
- url : ""http://www.google.com/"",
- visibleUrl : ""www.google.com"",
- cacheUrl :
- ""http://www.google.com/search?q=cache:zhool8dxBV4J:www.google.com"",
- title : ""Google"",
- titleNoFormatting : ""Google"",
- content : ""Enables users to search the Web, Usenet, and
- images. Features include PageRank, caching and translation of
- results, and an option to find similar pages.""
- },
- {
- GsearchResultClass:""GwebSearch"",
- unescapedUrl : ""http://news.google.com/"",
- url : ""http://news.google.com/"",
- visibleUrl : ""news.google.com"",
- cacheUrl :
- ""http://www.google.com/search?q=cache:Va_XShOz_twJ:news.google.com"",
- title : ""Google News"",
- titleNoFormatting : ""Google News"",
- content : ""Aggregated headlines and a search engine of many of the world's news sources.""
- },
-
- {
- GsearchResultClass:""GwebSearch"",
- unescapedUrl : ""http://groups.google.com/"",
- url : ""http://groups.google.com/"",
- visibleUrl : ""groups.google.com"",
- cacheUrl :
- ""http://www.google.com/search?q=cache:x2uPD3hfkn0J:groups.google.com"",
- title : ""Google Groups"",
- titleNoFormatting : ""Google Groups"",
- content : ""Enables users to search and browse the Usenet
- archives which consist of over 700 million messages, and post new
- comments.""
- },
-
- {
- GsearchResultClass:""GwebSearch"",
- unescapedUrl : ""http://maps.google.com/"",
- url : ""http://maps.google.com/"",
- visibleUrl : ""maps.google.com"",
- cacheUrl :
- ""http://www.google.com/search?q=cache:dkf5u2twBXIJ:maps.google.com"",
- title : ""Google Maps"",
- titleNoFormatting : ""Google Maps"",
- content : ""Provides directions, interactive maps, and
- satellite/aerial imagery of the United States. Can also search by
- keyword such as type of business.""
- }
- ],
-
- adResults:
- [
- {
- GsearchResultClass:""GwebSearch.ad"",
- title : ""Gartner Symposium/ITxpo"",
- content1 : ""Meet brilliant Gartner IT analysts"",
- content2 : ""20-23 May 2007- Barcelona, Spain"",
- url :
- ""http://www.google.com/url?sa=L&ai=BVualExYGRo3hD5ianAPJvejjD8-s6ye7kdTwArbI4gTAlrECEAEYASDXtMMFOAFQubWAjvr_____AWDXw_4EiAEBmAEAyAEBgAIB&num=1&q=http://www.gartner.com/it/sym/2007/spr8/spr8.jsp%3Fsrc%3D_spain_07_%26WT.srch%3D1&usg=__CxRH06E4Xvm9Muq13S4MgMtnziY="",
- impressionUrl :
- ""http://www.google.com/uds/css/ad-indicator-on.gif?ai=BVualExYGRo3hD5ianAPJvejjD8-s6ye7kdTwArbI4gTAlrECEAEYASDXtMMFOAFQubWAjvr_____AWDXw_4EiAEBmAEAyAEBgAIB"",
- unescapedUrl :
- ""http://www.google.com/url?sa=L&ai=BVualExYGRo3hD5ianAPJvejjD8-s6ye7kdTwArbI4gTAlrECEAEYASDXtMMFOAFQubWAjvr_____AWDXw_4EiAEBmAEAyAEBgAIB&num=1&q=http://www.gartner.com/it/sym/2007/spr8/spr8.jsp%3Fsrc%3D_spain_07_%26WT.srch%3D1&usg=__CxRH06E4Xvm9Muq13S4MgMtnziY="",
- visibleUrl : ""www.gartner.com""
- }
- ]
- }
- ";
- object o = JsonConvert.DeserializeObject(json);
- string s = string.Empty;
- s += s;
- }
- [Test]
- public void TorrentDeserializeTest()
- {
- string jsonText = @"{
- """":"""",
- ""label"": [
- [""SomeName"",6]
- ],
- ""torrents"": [
- [""192D99A5C943555CB7F00A852821CF6D6DB3008A"",201,""filename.avi"",178311826,1000,178311826,72815250,408,1603,7,121430,""NameOfLabelPrevioslyDefined"",3,6,0,8,128954,-1,0],
- ],
- ""torrentc"": ""1816000723""
- }";
- JObject o = (JObject)JsonConvert.DeserializeObject(jsonText);
- Assert.AreEqual(4, o.Children().Count());
- JToken torrentsArray = (JToken)o["torrents"];
- JToken nestedTorrentsArray = (JToken)torrentsArray[0];
- Assert.AreEqual(nestedTorrentsArray.Children().Count(), 19);
- }
- [Test]
- public void JsonPropertyClassSerialize()
- {
- JsonPropertyClass test = new JsonPropertyClass();
- test.Pie = "Delicious";
- test.SweetCakesCount = int.MaxValue;
- string jsonText = JsonConvert.SerializeObject(test);
- Assert.AreEqual(@"{""pie"":""Delicious"",""pie1"":""PieChart!"",""sweet_cakes_count"":2147483647}", jsonText);
- JsonPropertyClass test2 = JsonConvert.DeserializeObject<JsonPropertyClass>(jsonText);
- Assert.AreEqual(test.Pie, test2.Pie);
- Assert.AreEqual(test.SweetCakesCount, test2.SweetCakesCount);
- }
- [Test]
- public void BadJsonPropertyClassSerialize()
- {
- ExceptionAssert.Throws<JsonSerializationException>(
- @"A member with the name 'pie' already exists on 'Newtonsoft.Json.Tests.TestObjects.BadJsonPropertyClass'. Use the JsonPropertyAttribute to specify another name.",
- () =>
- {
- JsonConvert.SerializeObject(new BadJsonPropertyClass());
- });
- }
- [Test]
- public void InheritedListSerialize()
- {
- Article a1 = new Article("a1");
- Article a2 = new Article("a2");
- ArticleCollection articles1 = new ArticleCollection();
- articles1.Add(a1);
- articles1.Add(a2);
- string jsonText = JsonConvert.SerializeObject(articles1);
- ArticleCollection articles2 = JsonConvert.DeserializeObject<ArticleCollection>(jsonText);
- Assert.AreEqual(articles1.Count, articles2.Count);
- Assert.AreEqual(articles1[0].Name, articles2[0].Name);
- }
- [Test]
- public void ReadOnlyCollectionSerialize()
- {
- ReadOnlyCollection<int> r1 = new ReadOnlyCollection<int>(new int[] { 0, 1, 2, 3, 4 });
- string jsonText = JsonConvert.SerializeObject(r1);
- ReadOnlyCollection<int> r2 = JsonConvert.DeserializeObject<ReadOnlyCollection<int>>(jsonText);
- CollectionAssert.AreEqual(r1, r2);
- }
- #if !PocketPC && !NET20 && !WINDOWS_PHONE
- [Test]
- public void Unicode()
- {
- string json = @"[""PRE\u003cPOST""]";
- DataContractJsonSerializer s = new DataContractJsonSerializer(typeof(List<string>));
- List<string> dataContractResult = (List<string>)s.ReadObject(new MemoryStream(Encoding.UTF8.GetBytes(json)));
- List<string> jsonNetResult = JsonConvert.DeserializeObject<List<string>>(json);
- Assert.AreEqual(1, jsonNetResult.Count);
- Assert.AreEqual(dataContractResult[0], jsonNetResult[0]);
- }
- [Test]
- public void BackslashEqivilence()
- {
- string json = @"[""vvv\/vvv\tvvv\""vvv\bvvv\nvvv\rvvv\\vvv\fvvv""]";
- #if !SILVERLIGHT && !NETFX_CORE
- JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
- List<string> javaScriptSerializerResult = javaScriptSerializer.Deserialize<List<string>>(json);
- #endif
- DataContractJsonSerializer s = new DataContractJsonSerializer(typeof(List<string>));
- List<string> dataContractResult = (List<string>)s.ReadObject(new MemoryStream(Encoding.UTF8.GetBytes(json)));
- List<string> jsonNetResult = JsonConvert.DeserializeObject<List<string>>(json);
- Assert.AreEqual(1, jsonNetResult.Count);
- Assert.AreEqual(dataContractResult[0], jsonNetResult[0]);
- #if !SILVERLIGHT && !NETFX_CORE
- Assert.AreEqual(javaScriptSerializerResult[0], jsonNetResult[0]);
- #endif
- }
- [Test]
- public void InvalidBackslash()
- {
- string json = @"[""vvv\jvvv""]";
- ExceptionAssert.Throws<JsonReaderException>(
- @"Bad JSON escape sequence: \j. Path '', line 1, position 7.",
- () =>
- {
- JsonConvert.DeserializeObject<List<string>>(json);
- });
- }
- [Test]
- public void DateTimeTest()
- {
- List<DateTime> testDates = new List<DateTime>
- {
- new DateTime(100, 1, 1, 1, 1, 1, DateTimeKind.Local),
- new DateTime(100, 1, 1, 1, 1, 1, DateTimeKind.Unspecified),
- new DateTime(100, 1, 1, 1, 1, 1, DateTimeKind.Utc),
- new DateTime(2000, 1, 1, 1, 1, 1, DateTimeKind.Local),
- new DateTime(2000, 1, 1, 1, 1, 1, DateTimeKind.Unspecified),
- new DateTime(2000, 1, 1, 1, 1, 1, DateTimeKind.Utc),
- };
- MemoryStream ms = new MemoryStream();
- DataContractJsonSerializer s = new DataContractJsonSerializer(typeof(List<DateTime>));
- s.WriteObject(ms, testDates);
- ms.Seek(0, SeekOrigin.Begin);
- StreamReader sr = new StreamReader(ms);
- string expected = sr.ReadToEnd();
- string result = JsonConvert.SerializeObject(testDates, new JsonSerializerSettings { DateFormatHandling = DateFormatHandling.MicrosoftDateFormat });
- Assert.AreEqual(expected, result);
- }
- [Test]
- public void DateTimeOffsetIso()
- {
- List<DateTimeOffset> testDates = new List<DateTimeOffset>
- {
- new DateTimeOffset(new DateTime(100, 1, 1, 1, 1, 1, DateTimeKind.Utc)),
- new DateTimeOffset(2000, 1, 1, 1, 1, 1, TimeSpan.Zero),
- new DateTimeOffset(2000, 1, 1, 1, 1, 1, TimeSpan.FromHours(13)),
- new DateTimeOffset(2000, 1, 1, 1, 1, 1, TimeSpan.FromHours(-3.5)),
- };
- string result = JsonConvert.SerializeObject(testDates);
- Assert.AreEqual(@"[""0100-01-01T01:01:01+00:00"",""2000-01-01T01:01:01+00:00"",""2000-01-01T01:01:01+13:00"",""2000-01-01T01:01:01-03:30""]", result);
- }
- [Test]
- public void DateTimeOffsetMsAjax()
- {
- List<DateTimeOffset> testDates = new List<DateTimeOffset>
- {
- new DateTimeOffset(new DateTime(100, 1, 1, 1, 1, 1, DateTimeKind.Utc)),
- new DateTimeOffset(2000, 1, 1, 1, 1, 1, TimeSpan.Zero),
- new DateTimeOffset(2000, 1, 1, 1, 1, 1, TimeSpan.FromHours(13)),
- new DateTimeOffset(2000, 1, 1, 1, 1, 1, TimeSpan.FromHours(-3.5)),
- };
- string result = JsonConvert.SerializeObject(testDates, new JsonSerializerSettings { DateFormatHandling = DateFormatHandling.MicrosoftDateFormat });
- Assert.AreEqual(@"[""\/Date(-59011455539000+0000)\/"",""\/Date(946688461000+0000)\/"",""\/Date(946641661000+1300)\/"",""\/Date(946701061000-0330)\/""]", result);
- }
- #endif
- [Test]
- public void NonStringKeyDictionary()
- {
- Dictionary<int, int> values = new Dictionary<int, int>();
- values.Add(-5, 6);
- values.Add(int.MinValue, int.MaxValue);
- string json = JsonConvert.SerializeObject(values);
- Assert.AreEqual(@"{""-5"":6,""-2147483648"":2147483647}", json);
- Dictionary<int, int> newValues = JsonConvert.DeserializeObject<Dictionary<int, int>>(json);
- CollectionAssert.AreEqual(values, newValues);
- }
- [Test]
- public void AnonymousObjectSerialization()
- {
- var anonymous =
- new
- {
- StringValue = "I am a string",
- IntValue = int.MaxValue,
- NestedAnonymous = new { NestedValue = byte.MaxValue },
- NestedArray = new[] { 1, 2 },
- Product = new Product() { Name = "TestProduct" }
- };
- string json = JsonConvert.SerializeObject(anonymous);
- Assert.AreEqual(@"{""StringValue"":""I am a string"",""IntValue"":2147483647,""NestedAnonymous"":{""NestedValue"":255},""NestedArray"":[1,2],""Product"":{""Name"":""TestProduct"",""ExpiryDate"":""2000-01-01T00:00:00Z"",""Price"":0.0,""Sizes"":null}}", json);
- anonymous = JsonConvert.DeserializeAnonymousType(json, anonymous);
- Assert.AreEqual("I am a string", anonymous.StringValue);
- Assert.AreEqual(int.MaxValue, anonymous.IntValue);
- Assert.AreEqual(255, anonymous.NestedAnonymous.NestedValue);
- Assert.AreEqual(2, anonymous.NestedArray.Length);
- Assert.AreEqual(1, anonymous.NestedArray[0]);
- Assert.AreEqual(2, anonymous.NestedArray[1]);
- Assert.AreEqual("TestProduct", anonymous.Product.Name);
- }
- [Test]
- public void CustomCollectionSerialization()
- {
- ProductCollection collection = new ProductCollection()
- {
- new Product() {Name = "Test1"},
- new Product() {Name = "Test2"},
- new Product() {Name = "Test3"}
- };
- JsonSerializer jsonSerializer = new JsonSerializer();
- jsonSerializer.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
- StringWriter sw = new StringWriter();
- jsonSerializer.Serialize(sw, collection);
- Assert.AreEqual(@"[{""Name"":""Test1"",""ExpiryDate"":""2000-01-01T00:00:00Z"",""Price"":0.0,""Sizes"":null},{""Name"":""Test2"",""ExpiryDate"":""2000-01-01T00:00:00Z"",""Price"":0.0,""Sizes"":null},{""Name"":""Test3"",""ExpiryDate"":""2000-01-01T00:00:00Z"",""Price"":0.0,""Sizes"":null}]",
- sw.GetStringBuilder().ToString());
- ProductCollection collectionNew = (ProductCollection)jsonSerializer.Deserialize(new JsonTextReader(new StringReader(sw.GetStringBuilder().ToString())), typeof(ProductCollection));
- CollectionAssert.AreEqual(collection, collectionNew);
- }
- [Test]
- public void SerializeObject()
- {
- string json = JsonConvert.SerializeObject(new object());
- Assert.AreEqual("{}", json);
- }
- [Test]
- public void SerializeNull()
- {
- string json = JsonConvert.SerializeObject(null);
- Assert.AreEqual("null", json);
- }
- [Test]
- public void CanDeserializeIntArrayWhenNotFirstPropertyInJson()
- {
- string json = "{foo:'hello',bar:[1,2,3]}";
- ClassWithArray wibble = JsonConvert.DeserializeObject<ClassWithArray>(json);
- Assert.AreEqual("hello", wibble.Foo);
- Assert.AreEqual(4, wibble.Bar.Count);
- Assert.AreEqual(int.MaxValue, wibble.Bar[0]);
- Assert.AreEqual(1, wibble.Bar[1]);
- Assert.AreEqual(2, wibble.Bar[2]);
- Assert.AreEqual(3, wibble.Bar[3]);
- }
- [Test]
- public void CanDeserializeIntArray_WhenArrayIsFirstPropertyInJson()
- {
- string json = "{bar:[1,2,3], foo:'hello'}";
- ClassWithArray wibble = JsonConvert.DeserializeObject<ClassWithArray>(json);
- Assert.AreEqual("hello", wibble.Foo);
- Assert.AreEqual(4, wibble.Bar.Count);
- Assert.AreEqual(int.MaxValue, wibble.Bar[0]);
- Assert.AreEqual(1, wibble.Bar[1]);
- Assert.AreEqual(2, wibble.Bar[2]);
- Assert.AreEqual(3, wibble.Bar[3]);
- }
- [Test]
- public void ObjectCreationHandlingReplace()
- {
- string json = "{bar:[1,2,3], foo:'hello'}";
- JsonSerializer s = new JsonSerializer();
- s.ObjectCreationHandling = ObjectCreationHandling.Replace;
- ClassWithArray wibble = (ClassWithArray)s.Deserialize(new StringReader(json), typeof(ClassWithArray));
- Assert.AreEqual("hello", wibble.Foo);
- Assert.AreEqual(1, wibble.Bar.Count);
- }
- [Test]
- public void CanDeserializeSerializedJson()
- {
- ClassWithArray wibble = new ClassWithArray();
- wibble.Foo = "hello";
- wibble.Bar.Add(1);
- wibble.Bar.Add(2);
- wibble.Bar.Add(3);
- string json = JsonConvert.SerializeObject(wibble);
- ClassWithArray wibbleOut = JsonConvert.DeserializeObject<ClassWithArray>(json);
- Assert.AreEqual("hello", wibbleOut.Foo);
- Assert.AreEqual(5, wibbleOut.Bar.Count);
- Assert.AreEqual(int.MaxValue, wibbleOut.Bar[0]);
- Assert.AreEqual(int.MaxValue, wibbleOut.Bar[1]);
- Assert.AreEqual(1, wibbleOut.Bar[2]);
- Assert.AreEqual(2, wibbleOut.Bar[3]);
- Assert.AreEqual(3, wibbleOut.Bar[4]);
- }
- [Test]
- public void SerializeConverableObjects()
- {
- string json = JsonConvert.SerializeObject(new ConverableMembers(), Formatting.Indented);
- string expected = null;
- #if !(NETFX_CORE || PORTABLE)
- expected = @"{
- ""String"": ""string"",
- ""Int32"": 2147483647,
- ""UInt32"": 4294967295,
- ""Byte"": 255,
- ""SByte"": 127,
- ""Short"": 32767,
- ""UShort"": 65535,
- ""Long"": 9223372036854775807,
- ""ULong"": 9223372036854775807,
- ""Double"": 1.7976931348623157E+308,
- ""Float"": 3.40282347E+38,
- ""DBNull"": null,
- ""Bool"": true,
- ""Char"": ""\u0000""
- }";
- #else
- expected = @"{
- ""String"": ""string"",
- ""Int32"": 2147483647,
- ""UInt32"": 4294967295,
- ""Byte"": 255,
- ""SByte"": 127,
- ""Short"": 32767,
- ""UShort"": 65535,
- ""Long"": 9223372036854775807,
- ""ULong"": 9223372036854775807,
- ""Double"": 1.7976931348623157E+308,
- ""Float"": 3.40282347E+38,
- ""Bool"": true,
- ""Char"": ""\u0000""
- }";
- #endif
- Assert.AreEqual(expected, json);
- ConverableMembers c = JsonConvert.DeserializeObject<ConverableMembers>(json);
- Assert.AreEqual("string", c.String);
- Assert.AreEqual(double.MaxValue, c.Double);
- #if !(NETFX_CORE || PORTABLE)
- Assert.AreEqual(DBNull.Value, c.DBNull);
- #endif
- }
- [Test]
- public void SerializeStack()
- {
- Stack<object> s = new Stack<object>();
- s.Push(1);
- s.Push(2);
- s.Push(3);
- string json = JsonConvert.SerializeObject(s);
- Assert.AreEqual("[3,2,1]", json);
- }
- [Test]
- public void GuidTest()
- {
- Guid guid = new Guid("BED7F4EA-1A96-11d2-8F08-00A0C9A6186D");
- string json = JsonConvert.SerializeObject(new ClassWithGuid { GuidField = guid });
- Assert.AreEqual(@"{""GuidField"":""bed7f4ea-1a96-11d2-8f08-00a0c9a6186d""}", json);
- ClassWithGuid c = JsonConvert.DeserializeObject<ClassWithGuid>(json);
- Assert.AreEqual(guid, c.GuidField);
- }
- [Test]
- public void EnumTest()
- {
- string json = JsonConvert.SerializeObject(StringComparison.CurrentCultureIgnoreCase);
- Assert.AreEqual(@"1", json);
- StringComparison s = JsonConvert.DeserializeObject<StringComparison>(json);
- Assert.AreEqual(StringComparison.CurrentCultureIgnoreCase, s);
- }
- public class ClassWithTimeSpan
- {
- public TimeSpan TimeSpanField;
- }
- [Test]
- public void TimeSpanTest()
- {
- TimeSpan ts = new TimeSpan(00, 23, 59, 1);
- string json = JsonConvert.SerializeObject(new ClassWithTimeSpan { TimeSpanField = ts }, Formatting.Indented);
- Assert.AreEqual(@"{
- ""TimeSpanField"": ""23:59:01""
- }", json);
- ClassWithTimeSpan c = JsonConvert.DeserializeObject<ClassWithTimeSpan>(json);
- Assert.AreEqual(ts, c.TimeSpanField);
- }
- [Test]
- public void JsonIgnoreAttributeOnClassTest()
- {
- string json = JsonConvert.SerializeObject(new JsonIgnoreAttributeOnClassTestClass());
- Assert.AreEqual(@"{""TheField"":0,""Property"":21}", json);
- JsonIgnoreAttributeOnClassTestClass c = JsonConvert.DeserializeObject<JsonIgnoreAttributeOnClassTestClass>(@"{""TheField"":99,""Property"":-1,""IgnoredField"":-1}");
- Assert.AreEqual(0, c.IgnoredField);
- Assert.AreEqual(99, c.Field);
- }
- #if !SILVERLIGHT && !NETFX_CORE
- [Test]
- public void SerializeArrayAsArrayList()
- {
- string jsonText = @"[3, ""somestring"",[1,2,3],{}]";
- ArrayList o = JsonConvert.DeserializeObject<ArrayList>(jsonText);
- Assert.AreEqual(4, o.Count);
- Assert.AreEqual(3, ((JArray)o[2]).Count);
- Assert.AreEqual(0, ((JObject)o[3]).Count);
- }
- #endif
- [Test]
- public void SerializeMemberGenericList()
- {
- Name name = new Name("The Idiot in Next To Me");
- PhoneNumber p1 = new PhoneNumber("555-1212");
- PhoneNumber p2 = new PhoneNumber("444-1212");
- name.pNumbers.Add(p1);
- name.pNumbers.Add(p2);
- string json = JsonConvert.SerializeObject(name, Formatting.Indented);
- Assert.AreEqual(@"{
- ""personsName"": ""The Idiot in Next To Me"",
- ""pNumbers"": [
- {
- ""phoneNumber"": ""555-1212""
- },
- {
- ""phoneNumber"": ""444-1212""
- }
- ]
- }", json);
- Name newName = JsonConvert.DeserializeObject<Name>(json);
- Assert.AreEqual("The Idiot in Next To Me", newName.personsName);
- // not passed in as part of the constructor but assigned to pNumbers property
- Assert.AreEqual(2, newName.pNumbers.Count);
- Assert.AreEqual("555-1212", newName.pNumbers[0].phoneNumber);
- Assert.AreEqual("444-1212", newName.pNumbers[1].phoneNumber);
- }
- [Test]
- public void ConstructorCaseSensitivity()
- {
- ConstructorCaseSensitivityClass c = new ConstructorCaseSensitivityClass("param1", "Param1", "Param2");
- string json = JsonConvert.SerializeObject(c);
- ConstructorCaseSensitivityClass deserialized = JsonConvert.DeserializeObject<ConstructorCaseSensitivityClass>(json);
- Assert.AreEqual("param1", deserialized.param1);
- Assert.AreEqual("Param1", deserialized.Param1);
- Assert.AreEqual("Param2", deserialized.Param2);
- }
- [Test]
- public void SerializerShouldUseClassConverter()
- {
- ConverterPrecedenceClass c1 = new ConverterPrecedenceClass("!Test!");
- string json = JsonConvert.SerializeObject(c1);
- Assert.AreEqual(@"[""Class"",""!Test!""]", json);
- ConverterPrecedenceClass c2 = JsonConvert.DeserializeObject<ConverterPrecedenceClass>(json);
- Assert.AreEqual("!Test!", c2.TestValue);
- }
- [Test]
- public void SerializerShouldUseClassConverterOverArgumentConverter()
- {
- ConverterPrecedenceClass c1 = new ConverterPrecedenceClass("!Test!");
- string json = JsonConvert.SerializeObject(c1, new ArgumentConverterPrecedenceClassConverter());
- Assert.AreEqual(@"[""Class"",""!Test!""]", json);
- ConverterPrecedenceClass c2 = JsonConvert.DeserializeObject<ConverterPrecedenceClass>(json, new ArgumentConverterPrecedenceClassConverter());
- Assert.AreEqual("!Test!", c2.TestValue);
- }
- [Test]
- public void SerializerShouldUseMemberConverter_IsoDate()
- {
- DateTime testDate = new DateTime(JsonConvert.InitialJavaScriptDateTicks, DateTimeKind.Utc);
- MemberConverterClass m1 = new MemberConverterClass { DefaultConverter = testDate, MemberConverter = testDate };
- string json = JsonConvert.SerializeObject(m1);
- Assert.AreEqual(@"{""DefaultConverter"":""1970-01-01T00:00:00Z"",""MemberConverter"":""1970-01-01T00:00:00Z""}", json);
- MemberConverterClass m2 = JsonConvert.DeserializeObject<MemberConverterClass>(json);
- Assert.AreEqual(testDate, m2.DefaultConverter);
- Assert.AreEqual(testDate, m2.MemberConverter);
- }
- [Test]
- public void SerializerShouldUseMemberConverter_MsDate()
- {
- DateTime testDate = new DateTime(JsonConvert.InitialJavaScriptDateTicks, DateTimeKind.Utc);
- MemberConverterClass m1 = new MemberConverterClass { DefaultConverter = testDate, MemberConverter = testDate };
- string json = JsonConvert.SerializeObject(m1, new JsonSerializerSettings
- {
- DateFormatHandling = DateFormatHandling.MicrosoftDateFormat
- });
- Assert.AreEqual(@"{""DefaultConverter"":""\/Date(0)\/"",""MemberConverter"":""1970-01-01T00:00:00Z""}", json);
- MemberConverterClass m2 = JsonConvert.DeserializeObject<MemberConverterClass>(json);
- Assert.AreEqual(testDate, m2.DefaultConverter);
- Assert.AreEqual(testDate, m2.MemberConverter);
- }
- [Test]
- public void SerializerShouldUseMemberConverter_MsDate_DateParseNone()
- {
- DateTime testDate = new DateTime(JsonConvert.InitialJavaScriptDateTicks, DateTimeKind.Utc);
- MemberConverterClass m1 = new MemberConverterClass { DefaultConverter = testDate, MemberConverter = testDate };
- string json = JsonConvert.SerializeObject(m1, new JsonSerializerSettings
- {
- DateFormatHandling = DateFormatHandling.MicrosoftDateFormat,
- });
- Assert.AreEqual(@"{""DefaultConverter"":""\/Date(0)\/"",""MemberConverter"":""1970-01-01T00:00:00Z""}", json);
- ExceptionAssert.Throws<JsonReaderException>(
- "Could not convert string to DateTime: /Date(0)/. Path 'DefaultConverter', line 1, position 33.",
- () =>
- {
- JsonConvert.DeserializeObject<MemberConverterClass>(json, new JsonSerializerSettings
- {
- DateParseHandling = DateParseHandling.None
- });
- });
- }
- [Test]
- public void SerializerShouldUseMemberConverter_IsoDate_DateParseNone()
- {
- DateTime testDate = new DateTime(JsonConvert.InitialJavaScriptDateTicks, DateTimeKind.Utc);
- MemberConverterClass m1 = new MemberConverterClass { DefaultConverter = testDate, MemberConverter = testDate };
- string json = JsonConvert.SerializeObject(m1, new JsonSerializerSettings
- {
- DateFormatHandling = DateFormatHandling.IsoDateFormat,
- });
- Assert.AreEqual(@"{""DefaultConverter"":""1970-01-01T00:00:00Z"",""MemberConverter"":""1970-01-01T00:00:00Z""}", json);
- MemberConverterClass m2 = JsonConvert.DeserializeObject<MemberConverterClass>(json);
- Assert.AreEqual(testDate, m2.DefaultConverter);
- Assert.AreEqual(testDate, m2.MemberConverter);
- }
- [Test]
- public void SerializerShouldUseMemberConverterOverArgumentConverter()
- {
- DateTime testDate = new DateTime(JsonConvert.InitialJavaScriptDateTicks, DateTimeKind.Utc);
- MemberConverterClass m1 = new MemberConverterClass { DefaultConverter = testDate, MemberConverter = testDate };
- string json = JsonConvert.SerializeObject(m1, new JavaScriptDateTimeConverter());
- Assert.AreEqual(@"{""DefaultConverter"":new Date(0),""MemberConverter"":""1970-01-01T00:00:00Z""}", json);
- MemberConverterClass m2 = JsonConvert.DeserializeObject<MemberConverterClass>(json, new JavaScriptDateTimeConverter());
- Assert.AreEqual(testDate, m2.DefaultConverter);
- Assert.AreEqual(testDate, m2.MemberConverter);
- }
- [Test]
- public void ConverterAttributeExample()
- {
- DateTime date = Convert.ToDateTime("1970-01-01T00:00:00Z").ToUniversalTime();
- MemberConverterClass c = new MemberConverterClass
- {
- DefaultConverter = date,
- MemberConverter = date
- };
- string json = JsonConvert.SerializeObject(c, Formatting.Indented);
- Console.WriteLine(json);
- //{
- // "DefaultConverter": "\/Date(0)\/",
- // "MemberConverter": "1970-01-01T00:00:00Z"
- //}
- }
- [Test]
- public void SerializerShouldUseMemberConverterOverClassAndArgumentConverter()
- {
- ClassAndMemberConverterClass c1 = new ClassAndMemberConverterClass();
- c1.DefaultConverter = new ConverterPrecedenceClass("DefaultConverterValue");
- c1.MemberConverter = new ConverterPrecedenceClass("MemberConverterValue");
- string json = JsonConvert.SerializeObject(c1, new ArgumentConverterPrecedenceClassConverter());
- Assert.AreEqual(@"{""DefaultConverter"":[""Class"",""DefaultConverterValue""],""MemberConverter"":[""Member"",""MemberConverterValue""]}", json);
- ClassAndMemberConverterClass c2 = JsonConvert.DeserializeObject<ClassAndMemberConverterClass>(json, new ArgumentConverterPrecedenceClassConverter());
- Assert.AreEqual("DefaultConverterValue", c2.DefaultConverter.TestValue);
- Assert.AreEqual("MemberConverterValue", c2.MemberConverter.TestValue);
- }
- [Test]
- public void IncompatibleJsonAttributeShouldThrow()
- {
- ExceptionAssert.Throws<JsonSerializationException>(
- "Unexpected value when converting date. Expected DateTime or DateTimeOffset, got Newtonsoft.Json.Tests.TestObjects.IncompatibleJsonAttributeClass.",
- () =>
- {
- IncompatibleJsonAttributeClass c = new IncompatibleJsonAttributeClass();
- JsonConvert.SerializeObject(c);
- });
- }
- [Test]
- public void GenericAbstractProperty()
- {
- string json = JsonConvert.SerializeObject(new GenericImpl());
- Assert.AreEqual(@"{""Id"":0}", json);
- }
- [Test]
- public void DeserializeNullable()
- {
- string json;
- json = JsonConvert.SerializeObject((int?)null);
- Assert.AreEqual("null", json);
- json = JsonConvert.SerializeObject((int?)1);
- Assert.AreEqual("1", json);
- }
- [Test]
- public void SerializeJsonRaw()
- {
- PersonRaw personRaw = new PersonRaw
- {
- FirstName = "FirstNameValue",
- RawContent = new JRaw("[1,2,3,4,5]"),
- LastName = "LastNameValue"
- };
- string json;
- json = JsonConvert.SerializeObject(personRaw);
- Assert.AreEqual(@"{""first_name"":""FirstNameValue"",""RawContent"":[1,2,3,4,5],""last_name"":""LastNameValue""}", json);
- }
- [Test]
- public void DeserializeJsonRaw()
- {
- string json = @"{""first_name"":""FirstNameValue"",""RawContent"":[1,2,3,4,5],""last_name"":""LastNameValue""}";
- PersonRaw personRaw = JsonConvert.DeserializeObject<PersonRaw>(json);
- Assert.AreEqual("FirstNameValue", personRaw.FirstName);
- Assert.AreEqual("[1,2,3,4,5]", personRaw.RawContent.ToString());
- Assert.AreEqual("LastNameValue", personRaw.LastName);
- }
- [Test]
- public void DeserializeNullableMember()
- {
- UserNullable userNullablle = new UserNullable
- {
- Id = new Guid("AD6205E8-0DF4-465d-AEA6-8BA18E93A7E7"),
- FName = "FirstValue",
- LName = "LastValue",
- RoleId = 5,
- NullableRoleId = 6,
- NullRoleId = null,
- Active = true
- };
- string json = JsonConvert.SerializeObject(userNullablle);
- Assert.AreEqual(@"{""Id"":""ad6205e8-0df4-465d-aea6-8ba18e93a7e7"",""FName"":""FirstValue"",""LName"":""LastValue"",""RoleId"":5,""NullableRoleId"":6,""NullRoleId"":null,""Active"":true}", json);
- UserNullable userNullablleDeserialized = JsonConvert.DeserializeObject<UserNullable>(json);
- Assert.AreEqual(new Guid("AD6205E8-0DF4-465d-AEA6-8BA18E93A7E7"), userNullablleDeserialized.Id);
- Assert.AreEqual("FirstValue", userNullablleDeserialized.FName);
- Assert.AreEqual("LastValue", userNullablleDeserialized.LName);
- Assert.AreEqual(5, userNullablleDeserialized.RoleId);
- Assert.AreEqual(6, userNullablleDeserialized.NullableRoleId);
- Assert.AreEqual(null, userNullablleDeserialized.NullRoleId);
- Assert.AreEqual(true, userNullablleDeserialized.Active);
- }
- [Test]
- public void DeserializeInt64ToNullableDouble()
- {
- string json = @"{""Height"":1}";
- DoubleClass c = JsonConvert.DeserializeObject<DoubleClass>(json);
- Assert.AreEqual(1, c.Height);
- }
- [Test]
- public void SerializeTypeProperty()
- {
- string boolRef = typeof(bool).AssemblyQualifiedName;
- TypeClass typeClass = new TypeClass { TypeProperty = typeof(bool) };
- string json = JsonConvert.SerializeObject(typeClass);
- Assert.AreEqual(@"{""TypeProperty"":""" + boolRef + @"""}", json);
- TypeClass typeClass2 = JsonConvert.DeserializeObject<TypeClass>(json);
- Assert.AreEqual(typeof(bool), typeClass2.TypeProperty);
- string jsonSerializerTestRef = typeof(JsonSerializerTest).AssemblyQualifiedName;
- typeClass = new TypeClass { TypeProperty = typeof(JsonSerializerTest) };
- json = JsonConvert.SerializeObject(typeClass);
- Assert.AreEqual(@"{""TypeProperty"":""" + jsonSerializerTestRef + @"""}", json);
- typeClass2 = JsonConvert.DeserializeObject<TypeClass>(json);
- Assert.AreEqual(typeof(JsonSerializerTest), typeClass2.TypeProperty);
- }
- [Test]
- public void RequiredMembersClass()
- {
- RequiredMembersClass c = new RequiredMembersClass()
- {
- BirthDate = new DateTime(2000, 12, 20, 10, 55, 55, DateTimeKind.Utc),
- FirstName = "Bob",
- LastName = "Smith",
- MiddleName = "Cosmo"
- };
- string json = JsonConvert.SerializeObject(c, Formatting.Indented);
- Assert.AreEqual(@"{
- ""FirstName"": ""Bob"",
- ""MiddleName"": ""Cosmo"",
- ""LastName"": ""Smith"",
- ""BirthDate"": ""2000-12-20T10:55:55Z""
- }", json);
- RequiredMembersClass c2 = JsonConvert.DeserializeObject<RequiredMembersClass>(json);
- Assert.AreEqual("Bob", c2.FirstName);
- Assert.AreEqual(new DateTime(2000, 12, 20, 10, 55, 55, DateTimeKind.Utc), c2.BirthDate);
- }
- [Test]
- public void DeserializeRequiredMembersClassWithNullValues()
- {
- string json = @"{
- ""FirstName"": ""I can't be null bro!"",
- ""MiddleName"": null,
- ""LastName"": null,
- ""BirthDate"": ""\/Date(977309755000)\/""
- }";
- RequiredMembersClass c = JsonConvert.DeserializeObject<RequiredMembersClass>(json);
- Assert.AreEqual("I can't be null bro!", c.FirstName);
- Assert.AreEqual(null, c.MiddleName);
- Assert.AreEqual(null, c.LastName);
- }
- [Test]
- public void DeserializeRequiredMembersClassNullRequiredValueProperty()
- {
- ExceptionAssert.Throws<JsonSerializationException>(
- "Required property 'FirstName' expects a value but got null. Path '', line 6, position 2.",
- () =>
- {
- string json = @"{
- ""FirstName"": null,
- ""MiddleName"": null,
- ""LastName"": null,
- ""BirthDate"": ""\/Date(977309755000)\/""
- }";
- JsonConvert.DeserializeObject<RequiredMembersClass>(json);
- });
- }
- [Test]
- public void SerializeRequiredMembersClassNullRequiredValueProperty()
- {
- ExceptionAssert.Throws<JsonSerializationException>(
- "Cannot write a null value for property 'FirstName'. Property requires a value. Path ''.",
- () =>
- {
- RequiredMembersClass requiredMembersClass = new RequiredMembersClass
- {
- FirstName = null,
- BirthDate = new DateTime(2000, 10, 10, 10, 10, 10, DateTimeKind.Utc),
- LastName = null,
- MiddleName = null
- };
- string json = JsonConvert.SerializeObject(requiredMembersClass);
- Console.WriteLine(json);
- });
- }
- [Test]
- public void RequiredMembersClassMissingRequiredProperty()
- {
- ExceptionAssert.Throws<JsonSerializationException>(
- "Required property 'LastName' not found in JSON. Path '', line 3, position 2.",
- () =>
- {
- string json = @"{
- ""FirstName"": ""Bob""
- }";
- JsonConvert.DeserializeObject<RequiredMembersClass>(json);
- });
- }
- [Test]
- public void SerializeJaggedArray()
- {
- JaggedArray aa = new JaggedArray();
- aa.Before = "Before!";
- aa.After = "After!";
- aa.Coordinates = new[] { new[] { 1, 1 }, new[] { 1, 2 }, new[] { 2, 1 }, new[] { 2, 2 } };
- string json = JsonConvert.SerializeObject(aa);
- Assert.AreEqual(@"{""Before"":""Before!"",""Coordinates"":[[1,1],[1,2],[2,1],[2,2]],""After"":""After!""}", json);
- }
- [Test]
- public void DeserializeJaggedArray()
- {
- string json = @"{""Before"":""Before!"",""Coordinates"":[[1,1],[1,2],[2,1],[2,2]],""After"":""After!""}";
- JaggedArray aa = JsonConvert.DeserializeObject<JaggedArray>(json);
- Assert.AreEqual("Before!", aa.Before);
- Assert.AreEqual("After!", aa.After);
- Assert.AreEqual(4, aa.Coordinates.Length);
- Assert.AreEqual(2, aa.Coordinates[0].Length);
- Assert.AreEqual(1, aa.Coordinates[0][0]);
- Assert.AreEqual(2, aa.Coordinates[1][1]);
- string after = JsonConvert.SerializeObject(aa);
- Assert.AreEqual(json, after);
- }
- [Test]
- public void DeserializeGoogleGeoCode()
- {
- string json = @"{
- ""name"": ""1600 Amphitheatre Parkway, Mountain View, CA, USA"",
- ""Status"": {
- ""code"": 200,
- ""request"": ""geocode""
- },
- ""Placemark"": [
- {
- ""address"": ""1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA"",
- ""AddressDetails"": {
- ""Country"": {
- ""CountryNameCode"": ""US"",
- ""AdministrativeArea"": {
- ""AdministrativeAreaName"": ""CA"",
- ""SubAdministrativeArea"": {
- ""SubAdministrativeAreaName"": ""Santa Clara"",
- ""Locality"": {
- ""LocalityName"": ""Mountain View"",
- ""Thoroughfare"": {
- ""ThoroughfareName"": ""1600 Amphitheatre Pkwy""
- },
- ""PostalCode"": {
- ""PostalCodeNumber"": ""94043""
- }
- }
- }
- }
- },
- ""Accuracy"": 8
- },
- ""Point"": {
- ""coordinates"": [-122.083739, 37.423021, 0]
- }
- }
- ]
- }";
- GoogleMapGeocoderStructure jsonGoogleMapGeocoder = JsonConvert.DeserializeObject<GoogleMapGeocoderStructure>(json);
- }
- [Test]
- public void DeserializeInterfaceProperty()
- {
- InterfacePropertyTestClass testClass = new InterfacePropertyTestClass();
- testClass.co = new Co();
- String strFromTest = JsonConvert.SerializeObject(testClass);
- ExceptionAssert.Throws<JsonSerializationException>(
- @"Could not create an instance of type Newtonsoft.Json.Tests.TestObjects.ICo. Type is an interface or abstract class and cannot be instantiated. Path 'co.Name', line 1, position 14.",
- () =>
- {
- InterfacePropertyTestClass testFromDe = (InterfacePropertyTestClass)JsonConvert.DeserializeObject(strFromTest, typeof(InterfacePropertyTestClass));
- });
- }
- private Person GetPerson()
- {
- Person person = new Person
- {
- Name = "Mike Manager",
- BirthDate = new DateTime(1983, 8, 3, 0, 0, 0, DateTimeKind.Utc),
- Department = "IT",
- LastModified = new DateTime(2009, 2, 15, 0, 0, 0, DateTimeKind.Utc)
- };
- return person;
- }
- [Test]
- public void WriteJsonDates()
- {
- LogEntry entry = new LogEntry
- {
- LogDate = new DateTime(2009, 2, 15, 0, 0, 0, DateTimeKind.Utc),
- Details = "Application started."
- };
- string defaultJson = JsonConvert.SerializeObject(entry);
- // {"Details":"Application started.","LogDate":"\/Date(1234656000000)\/"}
- string isoJson = JsonConvert.SerializeObject(entry, new IsoDateTimeConverter());
- // {"Details":"Application started.","LogDate":"2009-02-15T00:00:00.0000000Z"}
- string javascriptJson = JsonConvert.SerializeObject(entry, new JavaScriptDateTimeConverter());
- // {"Details":"Application started.","LogDate":new Date(1234656000000)}
- Console.WriteLine(defaultJson);
- Console.WriteLine(isoJson);
- Console.WriteLine(javascriptJson);
- }
- public void GenericListAndDictionaryInterfaceProperties()
- {
- GenericListAndDictionaryInterfaceProperties o = new GenericListAndDictionaryInterfaceProperties();
- o.IDictionaryProperty = new Dictionary<string, int>
- {
- {"one", 1},
- {"two", 2},
- {"three", 3}
- };
- o.IListProperty = new List<int>
- {
- 1, 2, 3
- };
- o.IEnumerableProperty = new List<int>
- {
- 4, 5, 6
- };
- string json = JsonConvert.SerializeObject(o, Formatting.Indented);
- Assert.AreEqual(@"{
- ""IEnumerableProperty"": [
- 4,
- 5,
- 6
- ],
- ""IListProperty"": [
- 1,
- 2,
- 3
- ],
- ""IDictionaryProperty"": {
- ""one"": 1,
- ""two"": 2,
- ""three"": 3
- }
- }", json);
- GenericListAndDictionaryInterfaceProperties deserializedObject = JsonConvert.DeserializeObject<GenericListAndDictionaryInterfaceProperties>(json);
- Assert.IsNotNull(deserializedObject);
- CollectionAssert.AreEqual(o.IListProperty.ToArray(), deserializedObject.IListProperty.ToArray());
- CollectionAssert.AreEqual(o.IEnumerableProperty.ToArray(), deserializedObject.IEnumerableProperty.ToArray());
- CollectionAssert.AreEqual(o.IDictionaryProperty.ToArray(), deserializedObject.IDictionaryProperty.ToArray());
- }
- [Test]
- public void DeserializeBestMatchPropertyCase()
- {
- string json = @"{
- ""firstName"": ""firstName"",
- ""FirstName"": ""FirstName"",
- ""LastName"": ""LastName"",
- ""lastName"": ""lastName"",
- }";
- PropertyCase o = JsonConvert.DeserializeObject<PropertyCase>(json);
- Assert.IsNotNull(o);
- Assert.AreEqual("firstName", o.firstName);
- Assert.AreEqual("FirstName", o.FirstName);
- Assert.AreEqual("LastName", o.LastName);
- Assert.AreEqual("lastName", o.lastName);
- }
- [Test]
- public void DeserializePropertiesOnToNonDefaultConstructor()
- {
- SubKlass i = new SubKlass("my subprop");
- i.SuperProp = "overrided superprop";
- string json = JsonConvert.SerializeObject(i);
- Assert.AreEqual(@"{""SubProp"":""my subprop"",""SuperProp"":""overrided superprop""}", json);
- SubKlass ii = JsonConvert.DeserializeObject<SubKlass>(json);
- …
Large files files are truncated, but you can click here to view the full file