@@ -15,17 +15,6 @@ protected virtual IJsonSerializer GetSerializer() {
15
15
return new DefaultJsonSerializer ( ) ;
16
16
}
17
17
18
- [ Fact ]
19
- public void CanSerialize ( ) {
20
- var data = new SampleModel {
21
- Date = DateTime . Now ,
22
- Message = "Testing"
23
- } ;
24
- IJsonSerializer serializer = GetSerializer ( ) ;
25
- string json = serializer . Serialize ( data , new [ ] { "Date" } ) ;
26
- Assert . Equal ( @"{""message"":""Testing""}" , json ) ;
27
- }
28
-
29
18
[ Fact ]
30
19
public void CanSerializeEvent ( ) {
31
20
var ev = new Event {
@@ -34,36 +23,45 @@ public void CanSerializeEvent() {
34
23
} ;
35
24
ev . Data [ "FirstName" ] = "Blake" ;
36
25
26
+ var exclusions = new [ ] { nameof ( Event . Type ) , nameof ( Event . Source ) , "Date" , nameof ( Event . Geo ) , nameof ( Event . Count ) , nameof ( Event . ReferenceId ) , nameof ( Event . Tags ) , nameof ( Event . Value ) } ;
37
27
IJsonSerializer serializer = GetSerializer ( ) ;
38
- string json = serializer . Serialize ( ev , new [ ] { "Date" } ) ;
28
+ string json = serializer . Serialize ( ev , exclusions ) ;
39
29
Assert . Equal ( @"{""message"":""Testing"",""data"":{""FirstName"":""Blake""}}" , json ) ;
40
30
}
41
31
42
-
43
32
[ Fact ]
44
33
public void CanExcludeProperties ( ) {
45
34
var data = new SampleModel {
46
35
Date = DateTime . Now ,
47
36
Message = "Testing"
48
37
} ;
49
38
IJsonSerializer serializer = GetSerializer ( ) ;
50
- string json = serializer . Serialize ( data , new [ ] { " Date" } ) ;
39
+ string json = serializer . Serialize ( data , new [ ] { nameof ( SampleModel . Date ) , nameof ( SampleModel . Number ) , nameof ( SampleModel . Bool ) , nameof ( SampleModel . DateOffset ) , nameof ( SampleModel . Collection ) , nameof ( SampleModel . Dictionary ) , nameof ( SampleModel . Nested ) } ) ;
51
40
Assert . Equal ( @"{""message"":""Testing""}" , json ) ;
52
41
}
53
42
54
43
[ Fact ]
55
44
public void CanExcludeNestedProperties ( ) {
56
- var data = new SampleModel {
57
- Date = DateTime . Now ,
45
+ var data = new NestedModel {
46
+ Number = 1 ,
58
47
Message = "Testing" ,
59
- Nested = new SampleModel {
60
- Date = DateTime . Now ,
61
- Message = "Nested"
48
+ Nested = new NestedModel {
49
+ Message = "Nested" ,
50
+ Number = 2
62
51
}
63
52
} ;
53
+
54
+ IJsonSerializer serializer = GetSerializer ( ) ;
55
+ string json = serializer . Serialize ( data , new [ ] { nameof ( NestedModel . Number ) } ) ;
56
+ Assert . Equal ( @"{""message"":""Testing"",""nested"":{""message"":""Nested"",""nested"":null}}" , json ) ;
57
+ }
58
+
59
+ [ Fact ]
60
+ public void ShouldIncludeNullObjects ( ) {
61
+ var data = new DefaultsModel ( ) ;
64
62
IJsonSerializer serializer = GetSerializer ( ) ;
65
- string json = serializer . Serialize ( data , new [ ] { "Date" } ) ;
66
- Assert . Equal ( @"{""message "":""Testing"" ,""nested "":{""message "":""Nested""} }" , json ) ;
63
+ string json = serializer . Serialize ( data ) ;
64
+ Assert . Equal ( @"{""number "":0,""bool"":false ,""message "":null,""collection "":null,""dictionary"":null }" , json ) ;
67
65
}
68
66
69
67
[ Fact ]
@@ -87,44 +85,45 @@ public void CanExcludeMultiwordProperties() {
87
85
}
88
86
89
87
[ Fact ]
90
- public void WillIgnoreDefaultValues ( ) {
91
- var data = new SampleModel {
92
- Number = 0 ,
93
- Bool = false
94
- } ;
88
+ public void ShouldIncludeDefaultValues ( ) {
89
+ var data = new SampleModel ( ) ;
95
90
IJsonSerializer serializer = GetSerializer ( ) ;
96
- string json = serializer . Serialize ( data ) ;
97
- Assert . Equal ( @"{}" , json ) ;
91
+ string json = serializer . Serialize ( data , new [ ] { nameof ( SampleModel . Date ) , nameof ( SampleModel . DateOffset ) } ) ;
92
+ Assert . Equal ( @"{""number"":0,""bool"":false,""message"":null,""dictionary"":null,""collection"":null,""nested"":null }" , json ) ;
98
93
var model = serializer . Deserialize < SampleModel > ( json ) ;
99
94
Assert . Equal ( data . Number , model . Number ) ;
100
95
Assert . Equal ( data . Bool , model . Bool ) ;
96
+ Assert . Equal ( data . Message , model . Message ) ;
97
+ Assert . Equal ( data . Collection , model . Collection ) ;
98
+ Assert . Equal ( data . Dictionary , model . Dictionary ) ;
99
+ Assert . Equal ( data . Nested , model . Nested ) ;
101
100
}
102
101
103
102
[ Fact ]
104
103
public void CanSetMaxDepth ( ) {
105
- var data = new SampleModel {
104
+ var data = new NestedModel {
106
105
Message = "Level 1" ,
107
- Nested = new SampleModel {
106
+ Nested = new NestedModel {
108
107
Message = "Level 2" ,
109
- Nested = new SampleModel {
108
+ Nested = new NestedModel {
110
109
Message = "Level 3"
111
110
}
112
111
}
113
112
} ;
114
113
IJsonSerializer serializer = GetSerializer ( ) ;
115
- string json = serializer . Serialize ( data , maxDepth : 2 ) ;
114
+ string json = serializer . Serialize ( data , new [ ] { nameof ( NestedModel . Number ) } , maxDepth : 2 ) ;
116
115
Assert . Equal ( @"{""message"":""Level 1"",""nested"":{""message"":""Level 2""}}" , json ) ;
117
116
}
118
117
119
118
[ Fact ]
120
119
public void WillIgnoreEmptyCollections ( ) {
121
- var data = new SampleModel {
122
- Date = DateTime . Now ,
120
+ var data = new DefaultsModel {
123
121
Message = "Testing" ,
124
- Collection = new Collection < string > ( )
122
+ Collection = new Collection < string > ( ) ,
123
+ Dictionary = new Dictionary < string , string > ( )
125
124
} ;
126
125
IJsonSerializer serializer = GetSerializer ( ) ;
127
- string json = serializer . Serialize ( data , new [ ] { "Date" } ) ;
126
+ string json = serializer . Serialize ( data , new [ ] { nameof ( DefaultsModel . Bool ) , nameof ( DefaultsModel . Number ) } ) ;
128
127
Assert . Equal ( @"{""message"":""Testing""}" , json ) ;
129
128
}
130
129
@@ -158,21 +157,24 @@ public void WillSerializeDeepExceptionWithStackInformation() {
158
157
try {
159
158
try {
160
159
throw new ArgumentException ( "This is the innermost argument exception" , "wrongArg" ) ;
161
- } catch ( Exception e1 ) {
160
+ }
161
+ catch ( Exception e1 ) {
162
162
throw new TargetInvocationException ( "Target invocation exception." , e1 ) ;
163
163
}
164
- } catch ( Exception e2 ) {
164
+ }
165
+ catch ( Exception e2 ) {
165
166
throw new TargetInvocationException ( "Outer Exception. This is some text of the outer exception." , e2 ) ;
166
167
}
167
- } catch ( Exception ex ) {
168
+ }
169
+ catch ( Exception ex ) {
168
170
var client = CreateClient ( ) ;
169
171
var error = ex . ToErrorModel ( client ) ;
170
172
var ev = new Event ( ) ;
171
173
ev . Data [ Event . KnownDataKeys . Error ] = error ;
172
174
173
175
IJsonSerializer serializer = GetSerializer ( ) ;
174
176
string json = serializer . Serialize ( ev ) ;
175
-
177
+
176
178
Assert . Contains ( String . Format ( "\" line_number\" :{0}" , error . Inner . Inner . StackTrace . Single ( ) . LineNumber ) , json ) ;
177
179
}
178
180
}
@@ -193,17 +195,31 @@ public class Blah {
193
195
public string BlahId { get ; set ; }
194
196
}
195
197
198
+ public class NestedModel {
199
+ public int Number { get ; set ; }
200
+ public string Message { get ; set ; }
201
+ public NestedModel Nested { get ; set ; }
202
+ }
203
+
196
204
public class SampleModel {
197
205
public int Number { get ; set ; }
198
206
public bool Bool { get ; set ; }
199
- public string Message { get ; set ; }
200
207
public DateTime Date { get ; set ; }
208
+ public string Message { get ; set ; }
201
209
public DateTimeOffset DateOffset { get ; set ; }
202
210
public IDictionary < string , string > Dictionary { get ; set ; }
203
- public ICollection < string > Collection { get ; set ; }
211
+ public ICollection < string > Collection { get ; set ; }
204
212
public SampleModel Nested { get ; set ; }
205
213
}
206
214
215
+ public class DefaultsModel {
216
+ public int Number { get ; set ; }
217
+ public bool Bool { get ; set ; }
218
+ public string Message { get ; set ; }
219
+ public ICollection < string > Collection { get ; set ; }
220
+ public IDictionary < string , string > Dictionary { get ; set ; }
221
+ }
222
+
207
223
public class User {
208
224
public string FirstName { get ; set ; }
209
225
public string LastName { get ; set ; }
0 commit comments