2
// Copyright (c) 2007 James Newton-King
4
// Permission is hereby granted, free of charge, to any person
5
// obtaining a copy of this software and associated documentation
6
// files (the "Software"), to deal in the Software without
7
// restriction, including without limitation the rights to use,
8
// copy, modify, merge, publish, distribute, sublicense, and/or sell
9
// copies of the Software, and to permit persons to whom the
10
// Software is furnished to do so, subject to the following
13
// The above copyright notice and this permission notice shall be
14
// included in all copies or substantial portions of the Software.
16
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
18
// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
20
// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
21
// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
22
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
23
// OTHER DEALINGS IN THE SOFTWARE.
27
using System.Collections.Generic;
29
using Newtonsoft.Json.Tests.TestObjects;
31
using NUnit.Framework;
33
using Microsoft.VisualStudio.TestPlatform.UnitTestFramework;
34
using TestFixture = Microsoft.VisualStudio.TestPlatform.UnitTestFramework.TestClassAttribute;
35
using Test = Microsoft.VisualStudio.TestPlatform.UnitTestFramework.TestMethodAttribute;
38
namespace Newtonsoft.Json.Tests.Serialization
41
public class PopulateTests : TestFixtureBase
44
public void PopulatePerson()
46
Person p = new Person();
48
JsonConvert.PopulateObject(@"{""Name"":""James""}", p);
50
Assert.AreEqual("James", p.Name);
54
public void PopulateArray()
56
IList<Person> people = new List<Person>
58
new Person { Name = "Initial" }
61
JsonConvert.PopulateObject(@"[{""Name"":""James""}, null]", people);
63
Assert.AreEqual(3, people.Count);
64
Assert.AreEqual("Initial", people[0].Name);
65
Assert.AreEqual("James", people[1].Name);
66
Assert.AreEqual(null, people[2]);
70
public void PopulateStore()
72
Store s = new Store();
73
s.Color = StoreColor.Red;
74
s.product = new List<Product>
78
ExpiryDate = new DateTime(2000, 12, 3, 0, 0, 0, DateTimeKind.Utc),
79
Name = "ProductName!",
84
s.Mottos = new List<string> { "Can do!", "We deliver!" };
88
""Establised"": ""\/Date(1264122061000+0000)\/"",
108
""Escape"": ""\r\n\t\f\b?{\\r\\n\""'"",
111
""Name"": ""ProductName!"",
112
""ExpiryDate"": ""\/Date(975801600000)\/"",
119
JsonConvert.PopulateObject(json, s, new JsonSerializerSettings
121
ObjectCreationHandling = ObjectCreationHandling.Replace
124
Assert.AreEqual(1, s.Mottos.Count);
125
Assert.AreEqual("Fail whale", s.Mottos[0]);
126
Assert.AreEqual(1, s.product.Count);
128
//Assert.AreEqual("James", p.Name);
132
public void PopulateListOfPeople()
134
List<Person> p = new List<Person>();
136
JsonSerializer serializer = new JsonSerializer();
137
serializer.Populate(new StringReader(@"[{""Name"":""James""},{""Name"":""Jim""}]"), p);
139
Assert.AreEqual(2, p.Count);
140
Assert.AreEqual("James", p[0].Name);
141
Assert.AreEqual("Jim", p[1].Name);
145
public void PopulateDictionary()
147
Dictionary<string, string> p = new Dictionary<string, string>();
149
JsonSerializer serializer = new JsonSerializer();
150
serializer.Populate(new StringReader(@"{""Name"":""James""}"), p);
152
Assert.AreEqual(1, p.Count);
153
Assert.AreEqual("James", p["Name"]);
157
public void PopulateWithBadJson()
159
ExceptionAssert.Throws<JsonSerializationException>("Unexpected initial token 'Integer' when populating object. Expected JSON object or array. Path '', line 1, position 1.",
162
JsonConvert.PopulateObject("1", new Person());
b'\\ No newline at end of file'