using System;
using System.Reflection;
namespace Unity.VisualScripting.FullSerializer
{
// Global configuration options.
public static class fsGlobalConfig
{
///
/// Should deserialization be case sensitive? If this is false and the
/// JSON has multiple members with the same keys only separated by case,
/// then this results in undefined behavior.
///
public static bool IsCaseSensitive = true;
///
/// If exceptions are allowed internally, then additional date formats
/// can be deserialized. Note that the Full Serializer public API will
/// *not* throw exceptions with this enabled; errors will still be
/// returned in a fsResult instance.
///
public static bool AllowInternalExceptions = true;
///
/// This string will be used to prefix fields used internally by
/// FullSerializer.
///
public static string InternalFieldPrefix = "$";
}
///
/// Enables some top-level customization of Full Serializer.
///
public class fsConfig
{
///
/// The attributes that will force a field or property to be serialized.
///
public Type[] SerializeAttributes =
{
#if !NO_UNITY
typeof(UnityEngine.SerializeField),
#endif
typeof(fsPropertyAttribute),
typeof(SerializeAttribute),
typeof(SerializeAsAttribute)
};
///
/// The attributes that will force a field or property to *not* be
/// serialized.
///
public Type[] IgnoreSerializeAttributes =
{
typeof(NonSerializedAttribute),
typeof(fsIgnoreAttribute),
typeof(DoNotSerializeAttribute)
};
///
/// The default member serialization.
///
public fsMemberSerialization DefaultMemberSerialization = fsMemberSerialization.Default;
///
/// Convert a C# field/property name into the key used for the JSON
/// object. For example, you could force all JSON names to lowercase
/// with:
/// fsConfig.GetJsonNameFromMemberName = (name, info) =>
/// name.ToLower();
/// This will only be used when the name is not explicitly specified with
/// fsProperty.
///
public Func GetJsonNameFromMemberName = (name, info) => name;
///
/// If false, then *all* property serialization support will be disabled
/// - even properties explicitly annotated with fsProperty or any other
/// opt-in annotation.
/// Setting this to false means that SerializeNonAutoProperties and
/// SerializeNonPublicSetProperties will be completely ignored.
///
public bool EnablePropertySerialization = true;
///
/// Should the default serialization behaviour include non-auto
/// properties?
///
public bool SerializeNonAutoProperties = false;
///
/// Should the default serialization behaviour include properties with
/// non-public setters?
///
public bool SerializeNonPublicSetProperties = true;
///
/// If not null, this string format will be used for DateTime instead of
/// the default one.
///
public string CustomDateTimeFormatString = null;
///
/// Int64 and UInt64 will be serialized and deserialized as string for
/// compatibility
///
public bool Serialize64BitIntegerAsString = false;
///
/// Enums are serialized using their names by default. Setting this to
/// true will serialize them as integers instead.
///
public bool SerializeEnumsAsInteger = false;
}
}