content: package com.alibaba.fastjson2.annotation;
  
  import com.alibaba.fastjson2.JSONReader;
  import com.alibaba.fastjson2.JSONWriter;
  
  import java.lang.annotation.ElementType;
  import java.lang.annotation.Retention;
  import java.lang.annotation.RetentionPolicy;
  import java.lang.annotation.Target;
  
  /**
   * When the Key in the JSON does not match the property in the {@code Bean},
   * the conversion process may not meet expectations. {@link JSONField} can not only solve this problem but also implement custom requirements.
   */
  @Retention(RetentionPolicy.RUNTIME)
  @Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER, ElementType.ANNOTATION_TYPE})
  public @interface JSONField {
      /**
       * The order of the fields during
       * serialization and output in ascending order
       */
      int ordinal() default 0;
  
      /**
       * Specify the {@link String} as the key name in JSON
       */
      String name() default "";
  
      /**
       * If the field is {@link java.util.Date},
       * then please define the date format
       */
      String format() default "";
  
      String label() default "";
  
      /**
       * Whether the field is serialized
       * during serialization, default {@code ture}
       */
      boolean serialize() default true;
  
      /**
       * Whether the field is deserialized
       * during deserialization, default {@code ture}
       */
      boolean deserialize() default true;
  
      /**
       * If true, serialize and deserialize the field's internal properties
       */
      boolean unwrapped() default false;
  
      /**
       * Using multiple different field names when deserializing
       */
      String[] alternateNames() default {};
  
      /**
       * Specifies that {@link com.alibaba.fastjson2.writer.ObjectWriter} is used when serializing
       */
      @SuppressWarnings("rawtypes")
      @Deprecated
      Class writeUsing() default Void.class;
  
      /**
       * Specifies that {@link com.alibaba.fastjson2.writer.ObjectWriter} is used when serializing
       */
      @SuppressWarnings("rawtypes")
      Class serializeUsing() default Void.class;
  
      /**
       * Specifies that {@link com.alibaba.fastjson2.reader.ObjectReader} is used when deserializing
       */
      @SuppressWarnings("rawtypes")
      Class deserializeUsing() default Void.class;
  
      /**
       * Specify {@link JSONReader.Feature}s to use features when deserializing
       */
      JSONReader.Feature[] deserializeFeatures() default {};
  
      /**
       * Specify {@link JSONWriter.Feature}s to use features when serializing output
       */
      JSONWriter.Feature[] serializeFeatures() default {};
  
      boolean value() default false;
  
      /**
       *
       * @since 1.2.61
       */
      String defaultValue() default "";
  
      String locale() default "";
  
      String schema() default "";
  
      boolean jsonDirect() default false;
  
      /**
       * Property that indicates whether a value (which may be explicit
       * null) is expected for property during deserialization or not.
       * If expected, <code>ObjectReader</code> should indicate
       * this as a validity problem (usually by throwing an exception,
       * but this may be sent via problem handlers that can try to
       * rectify the problem, for example, by supplying a default
       * value).
       *
       * @since 2.0.20
       */
      boolean required() default false;
  
      /**
       * @since 2.0.52
       */
      String arrayToMapKey() default "";
  
      /**
       * @since 2.0.52
       */
      Class<?> arrayToMapDuplicateHandler() default Void.class;
  
      /**
       * @since 2.0.56
       */
      Class<?> contentAs() default Void.class;
  
      /**
       * @since 2.0.58
       */
      boolean skipTransient() default true;
  }
  