2
using System.Collections.Generic;
3
using System.Diagnostics;
4
using System.Globalization;
6
using System.Runtime.Serialization;
7
using System.Runtime.Serialization.Formatters;
10
using NUnit.Framework;
12
using Microsoft.VisualStudio.TestPlatform.UnitTestFramework;
13
using TestFixture = Microsoft.VisualStudio.TestPlatform.UnitTestFramework.TestClassAttribute;
14
using Test = Microsoft.VisualStudio.TestPlatform.UnitTestFramework.TestMethodAttribute;
16
using Newtonsoft.Json.Converters;
17
using Newtonsoft.Json.Serialization;
18
using Newtonsoft.Json.Tests.TestObjects;
20
using Newtonsoft.Json.Utilities.LinqBridge;
25
namespace Newtonsoft.Json.Tests.Serialization
29
public string Name { get; set; }
30
public DateTime StartDate { get; set; }
31
public IList<string> Roles { get; set; }
35
public class TraceWriterTests : TestFixtureBase
37
#if !(SILVERLIGHT || PORTABLE || NETFX_CORE)
39
public void DiagnosticsTraceWriterTest()
41
StringWriter sw = new StringWriter();
42
TextWriterTraceListener listener = new TextWriterTraceListener(sw);
46
Trace.AutoFlush = true;
47
Trace.Listeners.Add(listener);
49
DiagnosticsTraceWriter traceWriter = new DiagnosticsTraceWriter();
50
traceWriter.Trace(TraceLevel.Verbose, "Verbose!", null);
51
traceWriter.Trace(TraceLevel.Info, "Info!", null);
52
traceWriter.Trace(TraceLevel.Warning, "Warning!", null);
53
traceWriter.Trace(TraceLevel.Error, "Error!", null);
54
traceWriter.Trace(TraceLevel.Off, "Off!", null);
56
Assert.AreEqual(@"Newtonsoft.Json Verbose: 0 : Verbose!
57
Newtonsoft.Json Information: 0 : Info!
58
Newtonsoft.Json Warning: 0 : Warning!
59
Newtonsoft.Json Error: 0 : Error!
64
Trace.Listeners.Remove(listener);
65
Trace.AutoFlush = false;
71
public void MemoryTraceWriterTest()
73
Staff staff = new Staff();
74
staff.Name = "Arnie Admin";
75
staff.Roles = new List<string> {"Administrator"};
76
staff.StartDate = DateTime.Now;
78
ITraceWriter traceWriter = new MemoryTraceWriter();
80
JsonConvert.SerializeObject(
82
new JsonSerializerSettings {TraceWriter = traceWriter, Converters = {new JavaScriptDateTimeConverter()}});
84
Console.WriteLine(traceWriter);
85
// 2012-11-11T12:08:42.761 Info Started serializing Newtonsoft.Json.Tests.Serialization.Staff. Path ''.
86
// 2012-11-11T12:08:42.785 Info Started serializing System.DateTime with converter Newtonsoft.Json.Converters.JavaScriptDateTimeConverter. Path 'StartDate'.
87
// 2012-11-11T12:08:42.791 Info Finished serializing System.DateTime with converter Newtonsoft.Json.Converters.JavaScriptDateTimeConverter. Path 'StartDate'.
88
// 2012-11-11T12:08:42.797 Info Started serializing System.Collections.Generic.List`1[System.String]. Path 'Roles'.
89
// 2012-11-11T12:08:42.798 Info Finished serializing System.Collections.Generic.List`1[System.String]. Path 'Roles'.
90
// 2012-11-11T12:08:42.799 Info Finished serializing Newtonsoft.Json.Tests.Serialization.Staff. Path ''.
92
MemoryTraceWriter memoryTraceWriter = (MemoryTraceWriter)traceWriter;
94
Assert.AreEqual(743, memoryTraceWriter.ToString().Length);
95
Assert.AreEqual(6, memoryTraceWriter.GetTraceMessages().Count());
99
public void MemoryTraceWriterLimitTest()
101
MemoryTraceWriter traceWriter = new MemoryTraceWriter();
103
for (int i = 0; i < 1005; i++)
105
traceWriter.Trace(TraceLevel.Verbose, (i + 1).ToString(CultureInfo.InvariantCulture), null);
108
IList<string> traceMessages = traceWriter.GetTraceMessages().ToList();
110
Assert.AreEqual(1000, traceMessages.Count);
112
Assert.IsTrue(traceMessages.First().EndsWith(" 6"));
113
Assert.IsTrue(traceMessages.Last().EndsWith(" 1005"));
117
public void Serialize()
119
var traceWriter = new InMemoryTraceWriter
121
LevelFilter = TraceLevel.Info
125
JsonConvert.SerializeObject(
128
StringArray = new[] {"1", "2"},
129
IntList = new List<int> {1, 2},
130
Version = new Version(1, 2, 3, 4),
132
new Dictionary<string, string>
139
new JsonSerializerSettings
141
TraceWriter = traceWriter,
142
Formatting = Formatting.Indented
145
Assert.AreEqual("Started serializing Newtonsoft.Json.Tests.Serialization.TraceTestObject. Path ''.", traceWriter.TraceRecords[0].Message);
146
Assert.AreEqual("Started serializing System.Collections.Generic.List`1[System.Int32]. Path 'IntList'.", traceWriter.TraceRecords[1].Message);
147
Assert.AreEqual("Finished serializing System.Collections.Generic.List`1[System.Int32]. Path 'IntList'.", traceWriter.TraceRecords[2].Message);
148
Assert.AreEqual("Started serializing System.String[]. Path 'StringArray'.", traceWriter.TraceRecords[3].Message);
149
Assert.AreEqual("Finished serializing System.String[]. Path 'StringArray'.", traceWriter.TraceRecords[4].Message);
150
Assert.AreEqual("Started serializing System.Version. Path 'Version'.", traceWriter.TraceRecords[5].Message);
151
Assert.AreEqual("Finished serializing System.Version. Path 'Version'.", traceWriter.TraceRecords[6].Message);
152
Assert.AreEqual("Started serializing System.Collections.Generic.Dictionary`2[System.String,System.String]. Path 'StringDictionary'.", traceWriter.TraceRecords[7].Message);
153
Assert.AreEqual("Finished serializing System.Collections.Generic.Dictionary`2[System.String,System.String]. Path 'StringDictionary'.", traceWriter.TraceRecords[8].Message);
154
Assert.AreEqual("Finished serializing Newtonsoft.Json.Tests.Serialization.TraceTestObject. Path ''.", traceWriter.TraceRecords[9].Message);
158
public void Deserialize()
160
InMemoryTraceWriter traceWriter = new InMemoryTraceWriter
162
LevelFilter = TraceLevel.Info
165
TraceTestObject o2 = JsonConvert.DeserializeObject<TraceTestObject>(
180
""MajorRevision"": 0,
183
""StringDictionary"": {
189
new JsonSerializerSettings
191
TraceWriter = traceWriter
194
Assert.AreEqual(2, o2.IntList.Count);
195
Assert.AreEqual(2, o2.StringArray.Length);
196
Assert.AreEqual(1, o2.Version.Major);
197
Assert.AreEqual(2, o2.Version.Minor);
198
Assert.AreEqual(3, o2.StringDictionary.Count);
200
Assert.AreEqual("Started deserializing Newtonsoft.Json.Tests.Serialization.TraceTestObject. Path 'IntList', line 2, position 13.", traceWriter.TraceRecords[0].Message);
201
Assert.AreEqual("Started deserializing System.Collections.Generic.IList`1[System.Int32]. Path 'IntList', line 2, position 15.", traceWriter.TraceRecords[1].Message);
202
Assert.AreEqual("Finished deserializing System.Collections.Generic.IList`1[System.Int32]. Path 'IntList', line 5, position 4.", traceWriter.TraceRecords[2].Message);
203
Assert.AreEqual("Started deserializing System.String[]. Path 'StringArray', line 6, position 19.", traceWriter.TraceRecords[3].Message);
204
Assert.AreEqual("Finished deserializing System.String[]. Path 'StringArray', line 9, position 4.", traceWriter.TraceRecords[4].Message);
205
Assert.AreEqual("Deserializing System.Version using a non-default constructor 'Void .ctor(Int32, Int32, Int32, Int32)'. Path 'Version.Major', line 11, position 13.", traceWriter.TraceRecords[5].Message);
206
Assert.AreEqual("Started deserializing System.Version. Path 'Version', line 17, position 4.", traceWriter.TraceRecords[6].Message);
207
Assert.AreEqual("Finished deserializing System.Version. Path 'Version', line 17, position 4.", traceWriter.TraceRecords[7].Message);
208
Assert.AreEqual("Started deserializing System.Collections.Generic.IDictionary`2[System.String,System.String]. Path 'StringDictionary.1', line 19, position 9.", traceWriter.TraceRecords[8].Message);
209
Assert.AreEqual("Finished deserializing System.Collections.Generic.IDictionary`2[System.String,System.String]. Path 'StringDictionary', line 22, position 4.", traceWriter.TraceRecords[9].Message);
210
Assert.AreEqual("Finished deserializing Newtonsoft.Json.Tests.Serialization.TraceTestObject. Path '', line 23, position 2.", traceWriter.TraceRecords[10].Message);
214
public void ErrorDeserializing()
216
string json = @"{""Integer"":""hi""}";
218
var traceWriter = new InMemoryTraceWriter
220
LevelFilter = TraceLevel.Info
223
ExceptionAssert.Throws<Exception>(
224
"Could not convert string to integer: hi. Path 'Integer', line 1, position 15.",
227
JsonConvert.DeserializeObject<IntegerTestClass>(
229
new JsonSerializerSettings
231
TraceWriter = traceWriter
235
Assert.AreEqual(2, traceWriter.TraceRecords.Count);
237
Assert.AreEqual(TraceLevel.Info, traceWriter.TraceRecords[0].Level);
238
Assert.AreEqual("Started deserializing Newtonsoft.Json.Tests.Serialization.IntegerTestClass. Path 'Integer', line 1, position 11.", traceWriter.TraceRecords[0].Message);
240
Assert.AreEqual(TraceLevel.Error, traceWriter.TraceRecords[1].Level);
241
Assert.AreEqual("Error deserializing Newtonsoft.Json.Tests.Serialization.IntegerTestClass. Could not convert string to integer: hi. Path 'Integer', line 1, position 15.", traceWriter.TraceRecords[1].Message);
245
public void ErrorDeserializingNested()
247
string json = @"{""IntList"":[1, ""two""]}";
249
var traceWriter = new InMemoryTraceWriter
251
LevelFilter = TraceLevel.Info
254
ExceptionAssert.Throws<Exception>(
255
"Could not convert string to integer: two. Path 'IntList[1]', line 1, position 20.",
258
JsonConvert.DeserializeObject<TraceTestObject>(
260
new JsonSerializerSettings
262
TraceWriter = traceWriter
266
Assert.AreEqual(3, traceWriter.TraceRecords.Count);
268
Assert.AreEqual(TraceLevel.Info, traceWriter.TraceRecords[0].Level);
269
Assert.AreEqual("Started deserializing Newtonsoft.Json.Tests.Serialization.TraceTestObject. Path 'IntList', line 1, position 11.", traceWriter.TraceRecords[0].Message);
271
Assert.AreEqual(TraceLevel.Info, traceWriter.TraceRecords[1].Level);
272
Assert.AreEqual("Started deserializing System.Collections.Generic.IList`1[System.Int32]. Path 'IntList', line 1, position 12.", traceWriter.TraceRecords[1].Message);
274
Assert.AreEqual(TraceLevel.Error, traceWriter.TraceRecords[2].Level);
275
Assert.AreEqual("Error deserializing System.Collections.Generic.IList`1[System.Int32]. Could not convert string to integer: two. Path 'IntList[1]', line 1, position 20.", traceWriter.TraceRecords[2].Message);
279
public void SerializeDictionarysWithPreserveObjectReferences()
281
PreserveReferencesHandlingTests.CircularDictionary circularDictionary = new PreserveReferencesHandlingTests.CircularDictionary();
282
circularDictionary.Add("other", new PreserveReferencesHandlingTests.CircularDictionary { { "blah", null } });
283
circularDictionary.Add("self", circularDictionary);
285
InMemoryTraceWriter traceWriter = new InMemoryTraceWriter
287
LevelFilter = TraceLevel.Verbose
290
JsonConvert.SerializeObject(
293
new JsonSerializerSettings
295
PreserveReferencesHandling = PreserveReferencesHandling.All,
296
TraceWriter = traceWriter
299
Assert.IsTrue(traceWriter.TraceRecords.Any(r => r.Message == "Writing object reference Id '1' for Newtonsoft.Json.Tests.Serialization.PreserveReferencesHandlingTests+CircularDictionary. Path ''."));
300
Assert.IsTrue(traceWriter.TraceRecords.Any(r => r.Message == "Writing object reference Id '2' for Newtonsoft.Json.Tests.Serialization.PreserveReferencesHandlingTests+CircularDictionary. Path 'other'."));
301
Assert.IsTrue(traceWriter.TraceRecords.Any(r => r.Message == "Writing object reference to Id '1' for Newtonsoft.Json.Tests.Serialization.PreserveReferencesHandlingTests+CircularDictionary. Path 'self'."));
305
public void DeserializeDictionarysWithPreserveObjectReferences()
318
InMemoryTraceWriter traceWriter = new InMemoryTraceWriter
320
LevelFilter = TraceLevel.Verbose
323
JsonConvert.DeserializeObject<PreserveReferencesHandlingTests.CircularDictionary>(json,
324
new JsonSerializerSettings
326
PreserveReferencesHandling = PreserveReferencesHandling.All,
327
TraceWriter = traceWriter
330
Assert.IsTrue(traceWriter.TraceRecords.Any(r => r.Message == "Read object reference Id '1' for Newtonsoft.Json.Tests.Serialization.PreserveReferencesHandlingTests+CircularDictionary. Path 'other', line 3, position 11."));
331
Assert.IsTrue(traceWriter.TraceRecords.Any(r => r.Message == "Read object reference Id '2' for Newtonsoft.Json.Tests.Serialization.PreserveReferencesHandlingTests+CircularDictionary. Path 'other.blah', line 5, position 12."));
332
Assert.IsTrue(traceWriter.TraceRecords.Any(r => r.Message == "Resolved object reference '1' to Newtonsoft.Json.Tests.Serialization.PreserveReferencesHandlingTests+CircularDictionary. Path 'self', line 9, position 4."));
336
public void WriteTypeNameForObjects()
338
InMemoryTraceWriter traceWriter = new InMemoryTraceWriter
340
LevelFilter = TraceLevel.Verbose
343
IList<object> l = new List<object>
345
new Dictionary<string, string> { {"key!", "value!"}},
346
new Version(1, 2, 3, 4)
349
JsonConvert.SerializeObject(l, Formatting.Indented, new JsonSerializerSettings
351
TypeNameHandling = TypeNameHandling.All,
352
TraceWriter = traceWriter
355
Assert.AreEqual("Started serializing System.Collections.Generic.List`1[System.Object]. Path ''.", traceWriter.TraceRecords[0].Message);
356
Assert.AreEqual("Writing type name 'System.Collections.Generic.List`1[[System.Object, mscorlib]], mscorlib' for System.Collections.Generic.List`1[System.Object]. Path ''.", traceWriter.TraceRecords[1].Message);
357
Assert.AreEqual("Started serializing System.Collections.Generic.Dictionary`2[System.String,System.String]. Path '$values'.", traceWriter.TraceRecords[2].Message);
358
Assert.AreEqual("Writing type name 'System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.String, mscorlib]], mscorlib' for System.Collections.Generic.Dictionary`2[System.String,System.String]. Path '$values[0]'.", traceWriter.TraceRecords[3].Message);
359
Assert.AreEqual("Finished serializing System.Collections.Generic.Dictionary`2[System.String,System.String]. Path '$values[0]'.", traceWriter.TraceRecords[4].Message);
360
Assert.AreEqual("Started serializing System.Version. Path '$values[0]'.", traceWriter.TraceRecords[5].Message);
361
Assert.AreEqual("Writing type name 'System.Version, mscorlib' for System.Version. Path '$values[1]'.", traceWriter.TraceRecords[6].Message);
362
Assert.AreEqual("Finished serializing System.Version. Path '$values[1]'.", traceWriter.TraceRecords[7].Message);
363
Assert.AreEqual("Finished serializing System.Collections.Generic.List`1[System.Object]. Path ''.", traceWriter.TraceRecords[8].Message);
367
public void SerializeConverter()
369
InMemoryTraceWriter traceWriter = new InMemoryTraceWriter
371
LevelFilter = TraceLevel.Verbose
374
IList<DateTime> d = new List<DateTime>
376
new DateTime(2000, 12, 12, 12, 12, 12, DateTimeKind.Utc)
379
string json = JsonConvert.SerializeObject(d, Formatting.Indented, new JsonSerializerSettings
381
Converters = { new JavaScriptDateTimeConverter() },
382
TraceWriter = traceWriter
385
Assert.AreEqual("Started serializing System.Collections.Generic.List`1[System.DateTime]. Path ''.", traceWriter.TraceRecords[0].Message);
386
Assert.AreEqual("Started serializing System.DateTime with converter Newtonsoft.Json.Converters.JavaScriptDateTimeConverter. Path ''.", traceWriter.TraceRecords[1].Message);
387
Assert.AreEqual("Finished serializing System.DateTime with converter Newtonsoft.Json.Converters.JavaScriptDateTimeConverter. Path '[0]'.", traceWriter.TraceRecords[2].Message);
388
Assert.AreEqual("Finished serializing System.Collections.Generic.List`1[System.DateTime]. Path ''.", traceWriter.TraceRecords[3].Message);
392
public void DeserializeConverter()
394
string json = @"[new Date(976623132000)]";
396
InMemoryTraceWriter traceWriter =
397
new InMemoryTraceWriter
399
LevelFilter = TraceLevel.Verbose
402
JsonConvert.DeserializeObject<List<DateTime>>(
404
new JsonSerializerSettings
406
Converters = {new JavaScriptDateTimeConverter()},
407
TraceWriter = traceWriter
410
Assert.AreEqual("Started deserializing System.Collections.Generic.List`1[System.DateTime]. Path '', line 1, position 1.", traceWriter.TraceRecords[0].Message);
411
Assert.AreEqual("Started deserializing System.DateTime with converter Newtonsoft.Json.Converters.JavaScriptDateTimeConverter. Path '[0]', line 1, position 10.", traceWriter.TraceRecords[1].Message);
412
Assert.AreEqual("Finished deserializing System.DateTime with converter Newtonsoft.Json.Converters.JavaScriptDateTimeConverter. Path '[0]', line 1, position 23.", traceWriter.TraceRecords[2].Message);
413
Assert.AreEqual("Finished deserializing System.Collections.Generic.List`1[System.DateTime]. Path '', line 1, position 24.", traceWriter.TraceRecords[3].Message);
417
public void DeserializeTypeName()
419
InMemoryTraceWriter traceWriter = new InMemoryTraceWriter
421
LevelFilter = TraceLevel.Verbose
425
""$type"": ""System.Collections.Generic.List`1[[System.Object, mscorlib]], mscorlib"",
428
""$type"": ""System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.String, mscorlib]], mscorlib"",
432
""$type"": ""System.Version, mscorlib"",
437
""MajorRevision"": 0,
443
JsonConvert.DeserializeObject(json, null, new JsonSerializerSettings
445
TypeNameHandling = TypeNameHandling.All,
446
TraceWriter = traceWriter
449
Assert.AreEqual("Resolved type 'System.Collections.Generic.List`1[[System.Object, mscorlib]], mscorlib' to System.Collections.Generic.List`1[System.Object]. Path '$type', line 2, position 84.", traceWriter.TraceRecords[0].Message);
450
Assert.AreEqual("Started deserializing System.Collections.Generic.List`1[System.Object]. Path '$values', line 3, position 15.", traceWriter.TraceRecords[1].Message);
451
Assert.AreEqual("Resolved type 'System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.String, mscorlib]], mscorlib' to System.Collections.Generic.Dictionary`2[System.String,System.String]. Path '$values[0].$type', line 5, position 120.", traceWriter.TraceRecords[2].Message);
452
Assert.AreEqual("Started deserializing System.Collections.Generic.Dictionary`2[System.String,System.String]. Path '$values[0].key!', line 6, position 14.", traceWriter.TraceRecords[3].Message);
453
Assert.AreEqual("Finished deserializing System.Collections.Generic.Dictionary`2[System.String,System.String]. Path '$values[0]', line 7, position 6.", traceWriter.TraceRecords[4].Message);
454
Assert.AreEqual("Resolved type 'System.Version, mscorlib' to System.Version. Path '$values[1].$type', line 9, position 42.", traceWriter.TraceRecords[5].Message);
455
Assert.AreEqual("Deserializing System.Version using a non-default constructor 'Void .ctor(Int32, Int32, Int32, Int32)'. Path '$values[1].Major', line 10, position 15.", traceWriter.TraceRecords[6].Message);
456
Assert.AreEqual("Started deserializing System.Version. Path '$values[1]', line 16, position 6.", traceWriter.TraceRecords[7].Message);
457
Assert.AreEqual("Finished deserializing System.Version. Path '$values[1]', line 16, position 6.", traceWriter.TraceRecords[8].Message);
458
Assert.AreEqual("Finished deserializing System.Collections.Generic.List`1[System.Object]. Path '$values', line 17, position 4.", traceWriter.TraceRecords[9].Message);
461
#if !(NETFX_CORE || PORTABLE || SILVERLIGHT)
463
public void DeserializeISerializable()
465
InMemoryTraceWriter traceWriter = new InMemoryTraceWriter
467
LevelFilter = TraceLevel.Verbose
470
ExceptionAssert.Throws<SerializationException>(
471
"Member 'ClassName' was not found.",
474
JsonConvert.DeserializeObject<Exception>(
476
new JsonSerializerSettings
478
TraceWriter = traceWriter
482
Assert.AreEqual("Deserializing System.Exception using ISerializable constructor. Path '', line 1, position 2.", traceWriter.TraceRecords[0].Message);
483
Assert.AreEqual(TraceLevel.Info, traceWriter.TraceRecords[0].Level);
484
Assert.AreEqual("Error deserializing System.Exception. Member 'ClassName' was not found. Path '', line 1, position 2.", traceWriter.TraceRecords[1].Message);
485
Assert.AreEqual(TraceLevel.Error, traceWriter.TraceRecords[1].Level);
490
public void DeserializeMissingMember()
492
InMemoryTraceWriter traceWriter = new InMemoryTraceWriter
494
LevelFilter = TraceLevel.Verbose
497
JsonConvert.DeserializeObject<Person>(
498
"{'MissingMemberProperty':'!!'}",
499
new JsonSerializerSettings
501
TraceWriter = traceWriter
504
Assert.AreEqual("Started deserializing Newtonsoft.Json.Tests.TestObjects.Person. Path 'MissingMemberProperty', line 1, position 25.", traceWriter.TraceRecords[0].Message);
505
Assert.AreEqual("Could not find member 'MissingMemberProperty' on Newtonsoft.Json.Tests.TestObjects.Person. Path 'MissingMemberProperty', line 1, position 25.", traceWriter.TraceRecords[1].Message);
506
Assert.AreEqual("Finished deserializing Newtonsoft.Json.Tests.TestObjects.Person. Path '', line 1, position 30.", traceWriter.TraceRecords[2].Message);
510
public void DeserializeMissingMemberConstructor()
512
InMemoryTraceWriter traceWriter = new InMemoryTraceWriter
514
LevelFilter = TraceLevel.Verbose
522
""MajorRevision"": 0,
523
""MinorRevision"": 4,
524
""MissingMemberProperty"": null
527
JsonConvert.DeserializeObject<Version>(json, new JsonSerializerSettings
529
TraceWriter = traceWriter
532
Assert.AreEqual("Deserializing System.Version using a non-default constructor 'Void .ctor(Int32, Int32, Int32, Int32)'. Path 'Major', line 2, position 11.", traceWriter.TraceRecords[0].Message);
533
Assert.AreEqual("Could not find member 'MissingMemberProperty' on System.Version. Path 'MissingMemberProperty', line 8, position 32.", traceWriter.TraceRecords[1].Message);
534
Assert.AreEqual("Started deserializing System.Version. Path '', line 9, position 2.", traceWriter.TraceRecords[2].Message);
535
Assert.AreEqual("Finished deserializing System.Version. Path '', line 9, position 2.", traceWriter.TraceRecords[3].Message);
539
public void ShouldSerializeTestClass()
541
ShouldSerializeTestClass c = new ShouldSerializeTestClass();
544
c._shouldSerializeName = true;
546
InMemoryTraceWriter traceWriter = new InMemoryTraceWriter
548
LevelFilter = TraceLevel.Verbose
551
JsonConvert.SerializeObject(c, new JsonSerializerSettings {TraceWriter = traceWriter});
553
Assert.AreEqual("ShouldSerialize result for property 'Name' on Newtonsoft.Json.Tests.Serialization.ShouldSerializeTestClass: True. Path ''.", traceWriter.TraceRecords[1].Message);
554
Assert.AreEqual(TraceLevel.Verbose, traceWriter.TraceRecords[1].Level);
556
traceWriter = new InMemoryTraceWriter
558
LevelFilter = TraceLevel.Verbose
561
c._shouldSerializeName = false;
563
JsonConvert.SerializeObject(c, new JsonSerializerSettings { TraceWriter = traceWriter });
565
Assert.AreEqual("ShouldSerialize result for property 'Name' on Newtonsoft.Json.Tests.Serialization.ShouldSerializeTestClass: False. Path ''.", traceWriter.TraceRecords[1].Message);
566
Assert.AreEqual(TraceLevel.Verbose, traceWriter.TraceRecords[1].Level);
570
public void SpecifiedTest()
572
SpecifiedTestClass c = new SpecifiedTestClass();
575
c.NameSpecified = false;
577
InMemoryTraceWriter traceWriter = new InMemoryTraceWriter
579
LevelFilter = TraceLevel.Verbose
582
string json = JsonConvert.SerializeObject(c, Formatting.Indented, new JsonSerializerSettings { TraceWriter = traceWriter });
584
Assert.AreEqual("Started serializing Newtonsoft.Json.Tests.Serialization.SpecifiedTestClass. Path ''.", traceWriter.TraceRecords[0].Message);
585
Assert.AreEqual("IsSpecified result for property 'Name' on Newtonsoft.Json.Tests.Serialization.SpecifiedTestClass: False. Path ''.", traceWriter.TraceRecords[1].Message);
586
Assert.AreEqual("IsSpecified result for property 'Weight' on Newtonsoft.Json.Tests.Serialization.SpecifiedTestClass: False. Path 'Age'.", traceWriter.TraceRecords[2].Message);
587
Assert.AreEqual("IsSpecified result for property 'Height' on Newtonsoft.Json.Tests.Serialization.SpecifiedTestClass: False. Path 'Age'.", traceWriter.TraceRecords[3].Message);
588
Assert.AreEqual("IsSpecified result for property 'FavoriteNumber' on Newtonsoft.Json.Tests.Serialization.SpecifiedTestClass: False. Path 'Age'.", traceWriter.TraceRecords[4].Message);
589
Assert.AreEqual("Finished serializing Newtonsoft.Json.Tests.Serialization.SpecifiedTestClass. Path ''.", traceWriter.TraceRecords[5].Message);
595
traceWriter = new InMemoryTraceWriter
597
LevelFilter = TraceLevel.Verbose
600
SpecifiedTestClass deserialized = JsonConvert.DeserializeObject<SpecifiedTestClass>(json, new JsonSerializerSettings { TraceWriter = traceWriter });
602
Assert.AreEqual("Started deserializing Newtonsoft.Json.Tests.Serialization.SpecifiedTestClass. Path 'Age', line 2, position 9.", traceWriter.TraceRecords[0].Message);
603
Assert.AreEqual("Finished deserializing Newtonsoft.Json.Tests.Serialization.SpecifiedTestClass. Path '', line 3, position 2.", traceWriter.TraceRecords[1].Message);
605
Assert.IsNull(deserialized.Name);
606
Assert.IsFalse(deserialized.NameSpecified);
607
Assert.IsFalse(deserialized.WeightSpecified);
608
Assert.IsFalse(deserialized.HeightSpecified);
609
Assert.IsFalse(deserialized.FavoriteNumberSpecified);
610
Assert.AreEqual(27, deserialized.Age);
612
c.NameSpecified = true;
613
c.WeightSpecified = true;
614
c.HeightSpecified = true;
615
c.FavoriteNumber = 23;
616
json = JsonConvert.SerializeObject(c, Formatting.Indented);
623
""FavoriteNumber"": 23
626
traceWriter = new InMemoryTraceWriter
628
LevelFilter = TraceLevel.Verbose
631
deserialized = JsonConvert.DeserializeObject<SpecifiedTestClass>(json, new JsonSerializerSettings { TraceWriter = traceWriter });
633
Assert.AreEqual("Started deserializing Newtonsoft.Json.Tests.Serialization.SpecifiedTestClass. Path 'Name', line 2, position 10.", traceWriter.TraceRecords[0].Message);
634
Assert.AreEqual("IsSpecified for property 'Name' on Newtonsoft.Json.Tests.Serialization.SpecifiedTestClass set to true. Path 'Name', line 2, position 18.", traceWriter.TraceRecords[1].Message);
635
Assert.AreEqual("IsSpecified for property 'Weight' on Newtonsoft.Json.Tests.Serialization.SpecifiedTestClass set to true. Path 'Weight', line 4, position 14.", traceWriter.TraceRecords[2].Message);
636
Assert.AreEqual("IsSpecified for property 'Height' on Newtonsoft.Json.Tests.Serialization.SpecifiedTestClass set to true. Path 'Height', line 5, position 14.", traceWriter.TraceRecords[3].Message);
637
Assert.AreEqual("Finished deserializing Newtonsoft.Json.Tests.Serialization.SpecifiedTestClass. Path '', line 7, position 2.", traceWriter.TraceRecords[4].Message);
639
Assert.AreEqual("James", deserialized.Name);
640
Assert.IsTrue(deserialized.NameSpecified);
641
Assert.IsTrue(deserialized.WeightSpecified);
642
Assert.IsTrue(deserialized.HeightSpecified);
643
Assert.IsTrue(deserialized.FavoriteNumberSpecified);
644
Assert.AreEqual(27, deserialized.Age);
645
Assert.AreEqual(23, deserialized.FavoriteNumber);
649
public class TraceRecord
651
public string Message { get; set; }
652
public TraceLevel Level { get; set; }
653
public Exception Exception { get; set; }
655
public override string ToString()
657
return Level + " - " + Message;
661
public class InMemoryTraceWriter : ITraceWriter
663
public TraceLevel LevelFilter { get; set; }
664
public IList<TraceRecord> TraceRecords { get; set; }
666
public InMemoryTraceWriter()
668
LevelFilter = TraceLevel.Verbose;
669
TraceRecords = new List<TraceRecord>();
672
public void Trace(TraceLevel level, string message, Exception ex)
683
public override string ToString()
685
StringBuilder sb = new StringBuilder();
686
foreach (var traceRecord in TraceRecords)
688
sb.AppendLine(traceRecord.Message);
691
return sb.ToString();
695
public class TraceTestObject
697
public IList<int> IntList { get; set; }
698
public string[] StringArray { get; set; }
699
public Version Version { get; set; }
700
public IDictionary<string, string> StringDictionary { get; set; }
703
public class IntegerTestClass
705
public int Integer { get; set; }
b'\\ No newline at end of file'