forked from VerifyTests/Verify
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSerializationSettings.cs
163 lines (140 loc) · 5.8 KB
/
SerializationSettings.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
// ReSharper disable UseObjectOrCollectionInitializer
using Formatting = Argon.Formatting;
partial class SerializationSettings
{
static JArrayConverter jArrayConverter = new();
static JObjectConverter jObjectConverter = new();
static KeyValuePairConverter keyValuePairConverter = new();
static InfoBuilder.Converter infoConverter = new();
#if NET6_0_OR_GREATER
static TimeConverter timeConverter = new();
static DateConverter dateConverter = new();
#endif
static StringEnumConverter stringEnumConverter = new();
static DelegateConverter delegateConverter = new();
static TargetInvocationExceptionConverter targetInvocationExceptionConverter = new();
static ToAppendConverter toAppendConverter = new();
static ExpressionConverter expressionConverter = new();
static TypeJsonConverter typeJsonConverter = new();
static MethodInfoConverter methodInfoConverter = new();
static FieldInfoConverter fieldInfoConverter = new();
static ConstructorInfoConverter constructorInfoConverter = new();
static CancelConverter cancelConverter = new();
static ParameterInfoConverter parameterInfoConverter = new();
static PropertyInfoConverter propertyInfoConverter = new();
static ClaimConverter claimConverter = new();
static AggregateExceptionConverter aggregateExceptionConverter = new();
static ClaimsPrincipalConverter claimsPrincipalConverter = new();
static ClaimsIdentityConverter claimsIdentityConverter = new();
static NameValueCollectionConverter nameValueCollectionConverter = new();
static StringDictionaryConverter stringDictionaryConverter = new();
static TaskConverter taskConverter = new();
static ValueTaskConverter valueTaskConverter = new();
static CombinationResultsConverter combinationResultsConverter = new();
JsonSerializerSettings jsonSettings;
public SerializationSettings()
{
IgnoreMembersThatThrow<NotImplementedException>();
IgnoreMembersThatThrow<NotSupportedException>();
IgnoreMembers<Exception>("Source", "HResult");
IgnoreMembersWithType<Stream>();
jsonSettings = BuildSettings();
}
public SerializationSettings(SerializationSettings settings)
{
ignoredMembers = settings.ignoredMembers.ToDictionary(
_ => _.Key,
_ => _.Value.Clone());
ignoredByNameMembers = settings.ignoredByNameMembers.Clone();
ignoreEmptyCollections = settings.ignoreEmptyCollections;
extraSettings = settings.extraSettings.Clone();
ignoreMembersThatThrow = settings.ignoreMembersThatThrow.Clone();
ignoredTypes = settings.ignoredTypes.Clone();
ignoredInstances = settings.ignoredInstances
.ToDictionary(
_ => _.Key,
_ => _.Value.Clone());
scrubDateTimes = settings.scrubDateTimes;
enumerableInterceptors = new(settings.enumerableInterceptors);
scrubGuids = settings.scrubGuids;
includeObsoletes = settings.includeObsoletes;
jsonSettings = BuildSettings();
}
bool scrubGuids = true;
public void DontScrubGuids() =>
scrubGuids = false;
bool scrubDateTimes = true;
public void DontScrubDateTimes() =>
scrubDateTimes = false;
JsonSerializerSettings BuildSettings()
{
#region defaultSerialization
var settings = new JsonSerializerSettings
{
Formatting = Formatting.Indented,
ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
DefaultValueHandling = DefaultValueHandling.Ignore
};
#endregion
settings.SerializationBinder = ShortNameBinder.Instance;
settings.ContractResolver = new CustomContractResolver(this);
var converters = settings.Converters;
converters.Add(aggregateExceptionConverter);
converters.Add(infoConverter);
#if NET6_0_OR_GREATER
converters.Add(dateConverter);
converters.Add(timeConverter);
#endif
converters.Add(stringEnumConverter);
converters.Add(expressionConverter);
converters.Add(delegateConverter);
converters.Add(targetInvocationExceptionConverter);
converters.Add(toAppendConverter);
converters.Add(typeJsonConverter);
converters.Add(methodInfoConverter);
converters.Add(fieldInfoConverter);
converters.Add(constructorInfoConverter);
converters.Add(cancelConverter);
converters.Add(propertyInfoConverter);
converters.Add(parameterInfoConverter);
converters.Add(claimConverter);
converters.Add(claimsIdentityConverter);
converters.Add(taskConverter);
converters.Add(valueTaskConverter);
converters.Add(claimsPrincipalConverter);
converters.Add(jArrayConverter);
converters.Add(jObjectConverter);
converters.Add(nameValueCollectionConverter);
converters.Add(stringDictionaryConverter);
converters.Add(keyValuePairConverter);
converters.Add(combinationResultsConverter);
foreach (var extraSetting in extraSettings)
{
extraSetting(settings);
}
return settings;
}
public void AddExtraSettings(Action<JsonSerializerSettings> action)
{
extraSettings.Add(action);
action(jsonSettings);
serializer = null;
}
List<Action<JsonSerializerSettings>> extraSettings = [];
JsonSerializer? serializer;
internal JsonSerializer Serializer
{
get
{
var jsonSerializer = serializer;
if (jsonSerializer is null)
{
return serializer = JsonSerializer.Create(jsonSettings);
}
return jsonSerializer;
}
}
internal bool OrderDictionaries = true;
public void DontSortDictionaries() =>
OrderDictionaries = false;
}