File: src\libraries\System.Text.Json\Common\JsonSourceGenerationOptionsAttribute.cs
Web Access
Project: src\src\libraries\System.Text.Json\gen\System.Text.Json.SourceGeneration.Roslyn4.0.csproj (System.Text.Json.SourceGeneration)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
namespace System.Text.Json.Serialization
{
    /// <summary>
    /// Specifies compile-time source generator configuration when applied to <see cref="JsonSerializerContext"/> class declarations.
    /// </summary>
    [AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
#if BUILDING_SOURCE_GENERATOR
    internal
#else
    public
#endif
    sealed class JsonSourceGenerationOptionsAttribute : JsonAttribute
    {
        /// <summary>
        /// Constructs a new <see cref="JsonSourceGenerationOptionsAttribute"/> instance.
        /// </summary>
        public JsonSourceGenerationOptionsAttribute() { }
 
        /// <summary>
        /// Constructs a new <see cref="JsonSourceGenerationOptionsAttribute"/> instance with a predefined set of options determined by the specified <see cref="JsonSerializerDefaults"/>.
        /// </summary>
        /// <param name="defaults">The <see cref="JsonSerializerDefaults"/> to reason about.</param>
        /// <exception cref="ArgumentOutOfRangeException">Invalid <paramref name="defaults"/> parameter.</exception>
        public JsonSourceGenerationOptionsAttribute(JsonSerializerDefaults defaults)
        {
            // Constructor kept in sync with equivalent overload in JsonSerializerOptions
 
            if (defaults is JsonSerializerDefaults.Web)
            {
                PropertyNameCaseInsensitive = true;
                PropertyNamingPolicy = JsonKnownNamingPolicy.CamelCase;
                NumberHandling = JsonNumberHandling.AllowReadingFromString;
            }
            else if (defaults is not JsonSerializerDefaults.General)
            {
                throw new ArgumentOutOfRangeException(nameof(defaults));
            }
        }
 
        /// <summary>
        /// Specifies the default value of <see cref="JsonSerializerOptions.AllowOutOfOrderMetadataProperties"/> when set.
        /// </summary>
        public bool AllowOutOfOrderMetadataProperties { get; set; }
 
        /// <summary>
        /// Specifies the default value of <see cref="JsonSerializerOptions.AllowTrailingCommas"/> when set.
        /// </summary>
        public bool AllowTrailingCommas { get; set; }
 
        /// <summary>
        /// Specifies the default value of <see cref="JsonSerializerOptions.Converters"/> when set.
        /// </summary>
        public Type[]? Converters { get; set; }
 
        /// <summary>
        /// Specifies the default value of <see cref="JsonSerializerOptions.DefaultBufferSize"/> when set.
        /// </summary>
        public int DefaultBufferSize { get; set; }
 
        /// <summary>
        /// Specifies the default value of <see cref="JsonSerializerOptions.DefaultIgnoreCondition"/> when set.
        /// </summary>
        public JsonIgnoreCondition DefaultIgnoreCondition { get; set; }
 
        /// <summary>
        /// Specifies the default value of <see cref="JsonSerializerOptions.DictionaryKeyPolicy"/> when set.
        /// </summary>
        public JsonKnownNamingPolicy DictionaryKeyPolicy { get; set; }
 
        /// <summary>
        /// Specifies the default value of <see cref="JsonSerializerOptions.IgnoreReadOnlyFields"/> when set.
        /// </summary>
        public bool IgnoreReadOnlyFields { get; set; }
 
        /// <summary>
        /// Specifies the default value of <see cref="JsonSerializerOptions.IgnoreReadOnlyProperties"/> when set.
        /// </summary>
        public bool IgnoreReadOnlyProperties { get; set; }
 
        /// <summary>
        /// Specifies the default value of <see cref="JsonSerializerOptions.IncludeFields"/> when set.
        /// </summary>
        public bool IncludeFields { get; set; }
 
        /// <summary>
        /// Specifies the default value of <see cref="JsonSerializerOptions.MaxDepth"/> when set.
        /// </summary>
        public int MaxDepth { get; set; }
 
        /// <summary>
        /// Specifies the default value of <see cref="JsonSerializerOptions.NumberHandling"/> when set.
        /// </summary>
        public JsonNumberHandling NumberHandling { get; set; }
 
        /// <summary>
        /// Specifies the default value of <see cref="JsonSerializerOptions.PreferredObjectCreationHandling"/> when set.
        /// </summary>
        public JsonObjectCreationHandling PreferredObjectCreationHandling { get; set; }
 
        /// <summary>
        /// Specifies the default value of <see cref="JsonSerializerOptions.PropertyNameCaseInsensitive"/> when set.
        /// </summary>
        public bool PropertyNameCaseInsensitive { get; set; }
 
        /// <summary>
        /// Specifies the default value of <see cref="JsonSerializerOptions.PropertyNamingPolicy"/> when set.
        /// </summary>
        public JsonKnownNamingPolicy PropertyNamingPolicy { get; set; }
 
        /// <summary>
        /// Specifies the default value of <see cref="JsonSerializerOptions.ReadCommentHandling"/> when set.
        /// </summary>
        public JsonCommentHandling ReadCommentHandling { get; set; }
 
        /// <summary>
        /// Specifies the default value of <see cref="JsonSerializerOptions.ReferenceHandler"/> when set.
        /// </summary>
        public JsonKnownReferenceHandler ReferenceHandler { get; set; }
 
        /// <summary>
        /// Specifies the default value of <see cref="JsonSerializerOptions.RespectNullableAnnotations"/> when set.
        /// </summary>
        public bool RespectNullableAnnotations { get; set; }
 
        /// <summary>
        /// Specifies the default value of <see cref="JsonSerializerOptions.RespectRequiredConstructorParameters"/> when set.
        /// </summary>
        public bool RespectRequiredConstructorParameters { get; set; }
 
        /// <summary>
        /// Specifies the default value of <see cref="JsonSerializerOptions.UnknownTypeHandling"/> when set.
        /// </summary>
        public JsonUnknownTypeHandling UnknownTypeHandling { get; set; }
 
        /// <summary>
        /// Specifies the default value of <see cref="JsonSerializerOptions.UnmappedMemberHandling"/> when set.
        /// </summary>
        public JsonUnmappedMemberHandling UnmappedMemberHandling { get; set; }
 
        /// <summary>
        /// Specifies the default value of <see cref="JsonSerializerOptions.WriteIndented"/> when set.
        /// </summary>
        public bool WriteIndented { get; set; }
 
        /// <summary>
        /// Specifies the default value of <see cref="JsonSerializerOptions.IndentCharacter"/> when set.
        /// </summary>
        public char IndentCharacter { get; set; }
 
        /// <summary>
        /// Specifies the default value of <see cref="JsonSerializerOptions.IndentCharacter"/> when set.
        /// </summary>
        public int IndentSize { get; set; }
 
        /// <summary>
        /// Specifies the default source generation mode for type declarations that don't set a <see cref="JsonSerializableAttribute.GenerationMode"/>.
        /// </summary>
        public JsonSourceGenerationMode GenerationMode { get; set; }
 
        /// <summary>
        /// Instructs the source generator to default to <see cref="JsonStringEnumConverter"/>
        /// instead of numeric serialization for all enum types encountered in its type graph.
        /// </summary>
        public bool UseStringEnumConverter { get; set; }
 
        /// <summary>
        /// Specifies the default value of <see cref="JsonSerializerOptions.NewLine"/> when set.
        /// </summary>
        public string? NewLine { get; set; }
    }
}