Custom ContractResolver for facilitating refernce type defaults. The ShouldSerialize code enables unchanged-by-user reference type defaults to properly not serialize. The ValueProvider code helps during deserialization to not
More...
|
override IList< JsonProperty > | CreateProperties (Type type, MemberSerialization memberSerialization) |
|
Custom ContractResolver for facilitating refernce type defaults. The ShouldSerialize code enables unchanged-by-user reference type defaults to properly not serialize. The ValueProvider code helps during deserialization to not
Definition at line 373 of file ConfigManager.cs.
override IList<JsonProperty> Terraria.ModLoader.Config.ReferenceDefaultsPreservingResolver.CreateProperties |
( |
Type |
type, |
|
|
MemberSerialization |
memberSerialization |
|
) |
| |
|
protected |
Definition at line 409 of file ConfigManager.cs.
References Terraria.ModLoader.Config.ConfigManager.ObjectEquals().
410 IList<JsonProperty> props = base.CreateProperties(type, memberSerialization);
412 ConstructorInfo ctor = type.GetConstructor(Type.EmptyTypes);
414 object referenceInstance = ctor.Invoke(null);
415 foreach (JsonProperty prop
in props.Where(p => p.Readable)) {
416 if (!prop.PropertyType.IsValueType) {
417 var a = type.GetMember(prop.PropertyName);
419 if (prop.PropertyType.GetConstructor(Type.EmptyTypes) != null) {
421 Func<object> defaultValueCreator = () => prop.ValueProvider.GetValue(ctor.Invoke(null));
422 prop.ValueProvider =
new NullToDefaultValueProvider(prop.ValueProvider, defaultValueCreator);
424 else if (prop.PropertyType.IsArray) {
425 Func<object> defaultValueCreator = () => (prop.ValueProvider.GetValue(referenceInstance) as Array).Clone();
426 prop.ValueProvider =
new NullToDefaultValueProvider(prop.ValueProvider, defaultValueCreator);
429 if (prop.ShouldSerialize == null)
430 prop.ShouldSerialize = instance =>
432 object val = prop.ValueProvider.GetValue(instance);
433 object refVal = prop.ValueProvider.GetValue(referenceInstance);
434 return !ConfigManager.ObjectEquals(val, refVal);