using System; using DPumpHydr.WinFrmUI.WenSkin.Json.Serialization; namespace DPumpHydr.WinFrmUI.WenSkin.Json { /// /// Instructs the how to serialize the object. /// [AttributeUsage(AttributeTargets.Class | AttributeTargets.Interface, AllowMultiple = false)] public abstract class JsonContainerAttribute : Attribute { internal bool? _isReference; internal bool? _itemIsReference; internal ReferenceLoopHandling? _itemReferenceLoopHandling; internal TypeNameHandling? _itemTypeNameHandling; private Type _namingStrategyType; private object[] _namingStrategyParameters; /// /// Gets or sets the id. /// /// The id. public string Id { get; set; } /// /// Gets or sets the title. /// /// The title. public string Title { get; set; } /// /// Gets or sets the description. /// /// The description. public string Description { get; set; } /// /// Gets or sets the collection's items converter. /// /// The collection's items converter. public Type ItemConverterType { get; set; } /// /// The parameter list to use when constructing the described by ItemConverterType. /// If null, the default constructor is used. /// When non-null, there must be a constructor defined in the that exactly matches the number, /// order, and type of these parameters. /// /// /// [JsonContainer(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })] /// public object[] ItemConverterParameters { get; set; } /// /// Gets or sets the of the . /// /// The of the . public Type NamingStrategyType { get { return _namingStrategyType; } set { _namingStrategyType = value; NamingStrategyInstance = null; } } /// /// The parameter list to use when constructing the described by NamingStrategyType. /// If null, the default constructor is used. /// When non-null, there must be a constructor defined in the that exactly matches the number, /// order, and type of these parameters. /// /// /// [JsonContainer(NamingStrategyType = typeof(MyNamingStrategy), NamingStrategyParameters = new object[] { 123, "Four" })] /// public object[] NamingStrategyParameters { get { return _namingStrategyParameters; } set { _namingStrategyParameters = value; NamingStrategyInstance = null; } } internal NamingStrategy NamingStrategyInstance { get; set; } /// /// Gets or sets a value that indicates whether to preserve object references. /// /// /// true to keep object reference; otherwise, false. The default is false. /// public bool IsReference { get { return _isReference ?? false; } set { _isReference = value; } } /// /// Gets or sets a value that indicates whether to preserve collection's items references. /// /// /// true to keep collection's items object references; otherwise, false. The default is false. /// public bool ItemIsReference { get { return _itemIsReference ?? false; } set { _itemIsReference = value; } } /// /// Gets or sets the reference loop handling used when serializing the collection's items. /// /// The reference loop handling. public ReferenceLoopHandling ItemReferenceLoopHandling { get { return _itemReferenceLoopHandling ?? ReferenceLoopHandling.Error; } set { _itemReferenceLoopHandling = value; } } /// /// Gets or sets the type name handling used when serializing the collection's items. /// /// The type name handling. public TypeNameHandling ItemTypeNameHandling { get { return _itemTypeNameHandling ?? TypeNameHandling.None; } set { _itemTypeNameHandling = value; } } /// /// Initializes a new instance of the class. /// protected JsonContainerAttribute() { } /// /// Initializes a new instance of the class with the specified container Id. /// /// The container Id. protected JsonContainerAttribute(string id) { Id = id; } } }