@@ -29,123 +29,12 @@ public async Task WriteAsync(IAsyncEnumerable<IDataItem> dataItems, IConfigurati
29
29
30
30
await foreach ( var item in dataItems . WithCancellation ( cancellationToken ) )
31
31
{
32
- WriteDataItem ( settings , writer , item ) ;
32
+ DataItemJsonConverter . WriteDataItem ( writer , item , settings . IncludeNullFields ) ;
33
33
}
34
34
35
35
writer . WriteEndArray ( ) ;
36
36
Console . WriteLine ( $ "Completed writing data to file '{ settings . FilePath } '") ;
37
37
}
38
38
}
39
-
40
- private static void WriteDataItem ( JsonSinkSettings settings , Utf8JsonWriter writer , IDataItem item , string ? objectName = null )
41
- {
42
- if ( objectName != null )
43
- {
44
- writer . WriteStartObject ( objectName ) ;
45
- }
46
- else
47
- {
48
- writer . WriteStartObject ( ) ;
49
- }
50
-
51
- foreach ( string fieldName in item . GetFieldNames ( ) )
52
- {
53
- var fieldValue = item . GetValue ( fieldName ) ;
54
- WriteFieldValue ( writer , fieldName , fieldValue , settings ) ;
55
- }
56
-
57
- writer . WriteEndObject ( ) ;
58
- }
59
-
60
- private static void WriteFieldValue ( Utf8JsonWriter writer , string fieldName , object ? fieldValue , JsonSinkSettings settings )
61
- {
62
- if ( fieldValue == null )
63
- {
64
- if ( settings . IncludeNullFields )
65
- {
66
- writer . WriteNull ( fieldName ) ;
67
- }
68
- }
69
- else
70
- {
71
- if ( fieldValue is IDataItem child )
72
- {
73
- WriteDataItem ( settings , writer , child , fieldName ) ;
74
- }
75
- else if ( fieldValue is IEnumerable < object > children )
76
- {
77
- writer . WriteStartArray ( fieldName ) ;
78
- foreach ( object arrayItem in children )
79
- {
80
- if ( arrayItem is IDataItem arrayChild )
81
- {
82
- WriteDataItem ( settings , writer , arrayChild ) ;
83
- }
84
- else if ( TryGetNumber ( arrayItem , out var number ) )
85
- {
86
- writer . WriteNumberValue ( number ) ;
87
- }
88
- else if ( arrayItem is bool boolean )
89
- {
90
- writer . WriteBooleanValue ( boolean ) ;
91
- }
92
- else
93
- {
94
- writer . WriteStringValue ( arrayItem . ToString ( ) ) ;
95
- }
96
- }
97
- writer . WriteEndArray ( ) ;
98
- }
99
- else if ( TryGetNumber ( fieldValue , out var number ) )
100
- {
101
- writer . WriteNumber ( fieldName , number ) ;
102
- }
103
- else if ( fieldValue is bool boolean )
104
- {
105
- writer . WriteBoolean ( fieldName , boolean ) ;
106
- }
107
- else
108
- {
109
- writer . WriteString ( fieldName , fieldValue . ToString ( ) ) ;
110
- }
111
- }
112
- }
113
-
114
- private static bool TryGetNumber ( object x , out double number )
115
- {
116
- if ( x is float f )
117
- {
118
- number = f ;
119
- return true ;
120
- }
121
- if ( x is double d )
122
- {
123
- number = d ;
124
- return true ;
125
- }
126
- if ( x is decimal m )
127
- {
128
- number = ( double ) m ;
129
- return true ;
130
- }
131
- if ( x is int i )
132
- {
133
- number = i ;
134
- return true ;
135
- }
136
- if ( x is short s )
137
- {
138
- number = s ;
139
- return true ;
140
- }
141
- if ( x is long l )
142
- {
143
- number = l ;
144
- return true ;
145
- }
146
-
147
- number = default ;
148
- return false ;
149
- }
150
39
}
151
40
}
0 commit comments