/// <summary> /// Builds a <see cref="TypeToRegisterForJson"/> for a type using the most sensible settings, /// with a specified <see cref="IStringSerializeAndDeserialize"/> to use everywhere the type appears. /// </summary> /// <param name="type">The type to register.</param> /// <param name="stringSerializer">The string serializer to use for <paramref name="type"/>.</param> /// <returns> /// The type to register for JSON serialization. /// </returns> public static TypeToRegisterForJson ToTypeToRegisterForJsonUsingStringSerializer( this Type type, IStringSerializeAndDeserialize stringSerializer) { if (type == null) { throw new ArgumentNullException(nameof(type)); } if (stringSerializer == null) { throw new ArgumentNullException(nameof(stringSerializer)); } var canConvertTypeMatchStrategy = type.ResolveDefaultIntoActionableRelatedTypesToInclude().ToCanConvertTypeMatchStrategy(); var jsonConverterBuilderId = Guid.NewGuid().ToString() + "-" + Guid.NewGuid().ToString(); JsonConverter ConverterBuilderFunc() => new StringSerializerBackedJsonConverter(type, stringSerializer, canConvertTypeMatchStrategy); var jsonConverterBuilder = new JsonConverterBuilder(jsonConverterBuilderId, ConverterBuilderFunc, ConverterBuilderFunc); var result = new TypeToRegisterForJson(type, MemberTypesToInclude.None, RelatedTypesToInclude.Default, jsonConverterBuilder, stringSerializer); return(result); }
/// <summary> /// Initializes a new instance of the <see cref="TypeToRegisterForJson{T}"/> class. /// </summary> /// <param name="memberTypesToInclude">Specifies which member types of <typeparamref name="T"/> that should also be registered.</param> /// <param name="relatedTypesToInclude">Specifies which types related to <typeparamref name="T"/> that should also be registered.</param> /// <param name="jsonConverterBuilder">Builds a serializing and deserializing <see cref="JsonConverter"/>.</param> /// <param name="keyInDictionaryStringSerializer">The serializer to use when dictionaries are keyed on <typeparamref name="T"/> and the keys should be written-to/read-from a string.</param> public TypeToRegisterForJson( MemberTypesToInclude memberTypesToInclude, RelatedTypesToInclude relatedTypesToInclude, JsonConverterBuilder jsonConverterBuilder, IStringSerializeAndDeserialize keyInDictionaryStringSerializer) : base(typeof(T), memberTypesToInclude, relatedTypesToInclude, jsonConverterBuilder, keyInDictionaryStringSerializer) { }
/// <summary> /// Initializes a new instance of the <see cref="TypeToRegisterForJson"/> class, specifying the origin types. /// </summary> /// <param name="type">The type to register.</param> /// <param name="recursiveOriginType">The type whose recursive processing of <paramref name="memberTypesToInclude"/> and <paramref name="relatedTypesToInclude"/> resulted in the creation of this <see cref="TypeToRegisterForJson"/>.</param> /// <param name="directOriginType">The type whose processing of <paramref name="memberTypesToInclude"/> and <paramref name="relatedTypesToInclude"/> directly resulted in the creation of this <see cref="TypeToRegisterForJson"/>.</param> /// <param name="memberTypesToInclude">Specifies which member types of <paramref name="type"/> that should also be registered.</param> /// <param name="relatedTypesToInclude">Specifies which types related to <paramref name="type"/> that should also be registered.</param> /// <param name="jsonConverterBuilder">Builds a serializing and deserializing <see cref="JsonConverter"/>.</param> /// <param name="keyInDictionaryStringSerializer">The serializer to use when dictionaries are keyed on <paramref name="type"/> and the keys should be written-to/read-from a string.</param> public TypeToRegisterForJson( Type type, Type recursiveOriginType, Type directOriginType, MemberTypesToInclude memberTypesToInclude, RelatedTypesToInclude relatedTypesToInclude, JsonConverterBuilder jsonConverterBuilder, IStringSerializeAndDeserialize keyInDictionaryStringSerializer) : base(type, recursiveOriginType, directOriginType, memberTypesToInclude, relatedTypesToInclude) { if (type == null) { throw new ArgumentNullException(nameof(type)); } if (recursiveOriginType == null) { throw new ArgumentNullException(nameof(recursiveOriginType)); } if (directOriginType == null) { throw new ArgumentNullException(nameof(directOriginType)); } if (jsonConverterBuilder != null) { if (memberTypesToInclude != MemberTypesToInclude.None) { throw new ArgumentException(Invariant($"{nameof(jsonConverterBuilder)} is specified, but {nameof(Serialization.MemberTypesToInclude)} is not {MemberTypesToInclude.None}.")); } if (type.IsGenericTypeDefinition) { throw new NotSupportedException(Invariant($"{nameof(jsonConverterBuilder)} is specified, but underlying type to register is an open generic.")); } } if (keyInDictionaryStringSerializer != null) { if (type.IsGenericTypeDefinition) { throw new NotSupportedException(Invariant($"{nameof(keyInDictionaryStringSerializer)} is specified, but underlying type to register is an open generic.")); } } this.JsonConverterBuilder = jsonConverterBuilder; this.KeyInDictionaryStringSerializer = keyInDictionaryStringSerializer; }