/// <summary> /// Build <see cref="JsonSerializerSettings" /> to use for serialization using Newtonsoft. /// </summary> /// <param name="serializationDirection">Direction of serialization.</param> /// <param name="formattingKind">Kind of formatting to use.</param> /// <returns>Prepared settings to use with Newtonsoft.</returns> public JsonSerializerSettings BuildJsonSerializerSettings( SerializationDirection serializationDirection, JsonFormattingKind formattingKind = JsonFormattingKind.Default) { (serializationDirection == SerializationDirection.Serialize || serializationDirection == SerializationDirection.Deserialize) .Named(Invariant($"{nameof(serializationDirection)}-must-be-{nameof(SerializationDirection.Serialize)}-or{nameof(SerializationDirection.Serialize)}")) .Must().BeTrue(); var result = SerializationKindToSettingsSelectorByDirection[formattingKind](SerializationDirection.Serialize); var specifiedConverters = this.RegisteredConverters.Select(_ => serializationDirection == SerializationDirection.Serialize ? _.SerializingConverterBuilderFunction() : _.DeserializingConverterBuilderFunction()).ToList(); var defaultConverters = this.GetDefaultConverters(serializationDirection, formattingKind); var converters = new JsonConverter[0] .Concat(specifiedConverters) .Concat(defaultConverters) .ToList(); // TODO: We may need this sorted differently; as in does it need to reverse? result.Converters = converters; if (this.OverrideContractResolver != null && this.OverrideContractResolver.ContainsKey(serializationDirection)) { var overrideResolver = this.OverrideContractResolver[serializationDirection]; new { overrideResolver }.Must().NotBeNull(); result.ContractResolver = overrideResolver.ContractResolverBuilderFunction(); } return(result); }
public JsonSerializerSettings BuildAnonymousJsonSerializerSettings( SerializationDirection serializationDirection, JsonFormattingKind formattingKind = JsonFormattingKind.Default) { // this is a hack to not mess with casing since the case must match for dynamic deserialization... var result = SerializationKindToSettingsSelectorByDirection[formattingKind](serializationDirection); result.ContractResolver = new DefaultContractResolver(); result.Converters = this.GetDefaultConverters(serializationDirection, formattingKind); return(result); }