/*
 * ProxMox VE API
 *
 * ProxMox VE API
 *
 * The version of the OpenAPI document: 2.0
 * Contact: support@lumaserv.com
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = ProxmoxSharp.Client.OpenAPIDateConverter;

namespace ProxmoxSharp.Model
{
    /// <summary>
    /// CreateStorageRequest
    /// </summary>
    [DataContract(Name = "CreateStorageRequest")]
    public partial class CreateStorageRequest : IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="CreateStorageRequest" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected CreateStorageRequest() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="CreateStorageRequest" /> class.
        /// </summary>
        /// <param name="authsupported">authsupported.</param>
        /// <param name="varBase">varBase.</param>
        /// <param name="blocksize">blocksize.</param>
        /// <param name="bwlimit">bwlimit.</param>
        /// <param name="comstarHg">comstarHg.</param>
        /// <param name="comstarTg">comstarTg.</param>
        /// <param name="content">content.</param>
        /// <param name="contentDirs">contentDirs.</param>
        /// <param name="createBasePath">createBasePath.</param>
        /// <param name="createSubdirs">createSubdirs.</param>
        /// <param name="dataPool">dataPool.</param>
        /// <param name="datastore">datastore.</param>
        /// <param name="disable">disable.</param>
        /// <param name="domain">domain.</param>
        /// <param name="encryptionKey">encryptionKey.</param>
        /// <param name="export">export.</param>
        /// <param name="fingerprint">fingerprint.</param>
        /// <param name="format">format.</param>
        /// <param name="fsName">fsName.</param>
        /// <param name="fuse">fuse.</param>
        /// <param name="isMountpoint">isMountpoint.</param>
        /// <param name="iscsiprovider">iscsiprovider.</param>
        /// <param name="keyring">keyring.</param>
        /// <param name="krbd">krbd.</param>
        /// <param name="lioTpg">lioTpg.</param>
        /// <param name="masterPubkey">masterPubkey.</param>
        /// <param name="maxProtectedBackups">maxProtectedBackups.</param>
        /// <param name="mkdir">mkdir.</param>
        /// <param name="monhost">monhost.</param>
        /// <param name="mountpoint">mountpoint.</param>
        /// <param name="varNamespace">varNamespace.</param>
        /// <param name="nocow">nocow.</param>
        /// <param name="nodes">nodes.</param>
        /// <param name="nowritecache">nowritecache.</param>
        /// <param name="options">options.</param>
        /// <param name="password">password.</param>
        /// <param name="path">path.</param>
        /// <param name="pool">pool.</param>
        /// <param name="port">port.</param>
        /// <param name="portal">portal.</param>
        /// <param name="preallocation">preallocation.</param>
        /// <param name="pruneBackups">pruneBackups.</param>
        /// <param name="saferemove">saferemove.</param>
        /// <param name="saferemoveStepsize">saferemoveStepsize.</param>
        /// <param name="saferemoveThroughput">saferemoveThroughput.</param>
        /// <param name="server">server.</param>
        /// <param name="share">share.</param>
        /// <param name="shared">shared.</param>
        /// <param name="skipCertVerification">skipCertVerification.</param>
        /// <param name="smbversion">smbversion.</param>
        /// <param name="snapshotAsVolumeChain">snapshotAsVolumeChain.</param>
        /// <param name="sparse">sparse.</param>
        /// <param name="storage">storage (required).</param>
        /// <param name="subdir">subdir.</param>
        /// <param name="taggedOnly">taggedOnly.</param>
        /// <param name="target">target.</param>
        /// <param name="thinpool">thinpool.</param>
        /// <param name="type">type (required).</param>
        /// <param name="username">username.</param>
        /// <param name="vgname">vgname.</param>
        /// <param name="zfsBasePath">zfsBasePath.</param>
        public CreateStorageRequest(string authsupported = default(string), string varBase = default(string), string blocksize = default(string), string bwlimit = default(string), string comstarHg = default(string), string comstarTg = default(string), string content = default(string), string contentDirs = default(string), bool createBasePath = default(bool), bool createSubdirs = default(bool), string dataPool = default(string), string datastore = default(string), bool disable = default(bool), string domain = default(string), string encryptionKey = default(string), string export = default(string), string fingerprint = default(string), string format = default(string), string fsName = default(string), bool fuse = default(bool), string isMountpoint = default(string), string iscsiprovider = default(string), string keyring = default(string), bool krbd = default(bool), string lioTpg = default(string), string masterPubkey = default(string), int maxProtectedBackups = default(int), bool mkdir = default(bool), string monhost = default(string), string mountpoint = default(string), string varNamespace = default(string), bool nocow = default(bool), string nodes = default(string), bool nowritecache = default(bool), string options = default(string), string password = default(string), string path = default(string), string pool = default(string), int port = default(int), string portal = default(string), string preallocation = default(string), string pruneBackups = default(string), bool saferemove = default(bool), int saferemoveStepsize = default(int), string saferemoveThroughput = default(string), string server = default(string), string share = default(string), bool shared = default(bool), bool skipCertVerification = default(bool), string smbversion = default(string), bool snapshotAsVolumeChain = default(bool), bool sparse = default(bool), string storage = default(string), string subdir = default(string), bool taggedOnly = default(bool), string target = default(string), string thinpool = default(string), string type = default(string), string username = default(string), string vgname = default(string), string zfsBasePath = default(string))
        {
            // to ensure "storage" is required (not null)
            if (storage == null)
            {
                throw new ArgumentNullException("storage is a required property for CreateStorageRequest and cannot be null");
            }
            this.Storage = storage;
            // to ensure "type" is required (not null)
            if (type == null)
            {
                throw new ArgumentNullException("type is a required property for CreateStorageRequest and cannot be null");
            }
            this.Type = type;
            this.Authsupported = authsupported;
            this.Base = varBase;
            this.Blocksize = blocksize;
            this.Bwlimit = bwlimit;
            this.ComstarHg = comstarHg;
            this.ComstarTg = comstarTg;
            this.Content = content;
            this.ContentDirs = contentDirs;
            this.CreateBasePath = createBasePath;
            this.CreateSubdirs = createSubdirs;
            this.DataPool = dataPool;
            this.Datastore = datastore;
            this.Disable = disable;
            this.Domain = domain;
            this.EncryptionKey = encryptionKey;
            this.Export = export;
            this.Fingerprint = fingerprint;
            this.Format = format;
            this.FsName = fsName;
            this.Fuse = fuse;
            this.IsMountpoint = isMountpoint;
            this.Iscsiprovider = iscsiprovider;
            this.Keyring = keyring;
            this.Krbd = krbd;
            this.LioTpg = lioTpg;
            this.MasterPubkey = masterPubkey;
            this.MaxProtectedBackups = maxProtectedBackups;
            this.Mkdir = mkdir;
            this.Monhost = monhost;
            this.Mountpoint = mountpoint;
            this.Namespace = varNamespace;
            this.Nocow = nocow;
            this.Nodes = nodes;
            this.Nowritecache = nowritecache;
            this.Options = options;
            this.Password = password;
            this.Path = path;
            this.Pool = pool;
            this.Port = port;
            this.Portal = portal;
            this.Preallocation = preallocation;
            this.PruneBackups = pruneBackups;
            this.Saferemove = saferemove;
            this.SaferemoveStepsize = saferemoveStepsize;
            this.SaferemoveThroughput = saferemoveThroughput;
            this.Server = server;
            this.Share = share;
            this.Shared = shared;
            this.SkipCertVerification = skipCertVerification;
            this.Smbversion = smbversion;
            this.SnapshotAsVolumeChain = snapshotAsVolumeChain;
            this.Sparse = sparse;
            this.Subdir = subdir;
            this.TaggedOnly = taggedOnly;
            this.Target = target;
            this.Thinpool = thinpool;
            this.Username = username;
            this.Vgname = vgname;
            this.ZfsBasePath = zfsBasePath;
        }

        /// <summary>
        /// Gets or Sets Authsupported
        /// </summary>
        [DataMember(Name = "authsupported", EmitDefaultValue = false)]
        public string Authsupported { get; set; }

        /// <summary>
        /// Gets or Sets Base
        /// </summary>
        [DataMember(Name = "base", EmitDefaultValue = false)]
        public string Base { get; set; }

        /// <summary>
        /// Gets or Sets Blocksize
        /// </summary>
        [DataMember(Name = "blocksize", EmitDefaultValue = false)]
        public string Blocksize { get; set; }

        /// <summary>
        /// Gets or Sets Bwlimit
        /// </summary>
        [DataMember(Name = "bwlimit", EmitDefaultValue = false)]
        public string Bwlimit { get; set; }

        /// <summary>
        /// Gets or Sets ComstarHg
        /// </summary>
        [DataMember(Name = "comstar_hg", EmitDefaultValue = false)]
        public string ComstarHg { get; set; }

        /// <summary>
        /// Gets or Sets ComstarTg
        /// </summary>
        [DataMember(Name = "comstar_tg", EmitDefaultValue = false)]
        public string ComstarTg { get; set; }

        /// <summary>
        /// Gets or Sets Content
        /// </summary>
        [DataMember(Name = "content", EmitDefaultValue = false)]
        public string Content { get; set; }

        /// <summary>
        /// Gets or Sets ContentDirs
        /// </summary>
        [DataMember(Name = "content-dirs", EmitDefaultValue = false)]
        public string ContentDirs { get; set; }

        /// <summary>
        /// Gets or Sets CreateBasePath
        /// </summary>
        [DataMember(Name = "create-base-path", EmitDefaultValue = true)]
        public bool CreateBasePath { get; set; }

        /// <summary>
        /// Gets or Sets CreateSubdirs
        /// </summary>
        [DataMember(Name = "create-subdirs", EmitDefaultValue = true)]
        public bool CreateSubdirs { get; set; }

        /// <summary>
        /// Gets or Sets DataPool
        /// </summary>
        [DataMember(Name = "data-pool", EmitDefaultValue = false)]
        public string DataPool { get; set; }

        /// <summary>
        /// Gets or Sets Datastore
        /// </summary>
        [DataMember(Name = "datastore", EmitDefaultValue = false)]
        public string Datastore { get; set; }

        /// <summary>
        /// Gets or Sets Disable
        /// </summary>
        [DataMember(Name = "disable", EmitDefaultValue = true)]
        public bool Disable { get; set; }

        /// <summary>
        /// Gets or Sets Domain
        /// </summary>
        [DataMember(Name = "domain", EmitDefaultValue = false)]
        public string Domain { get; set; }

        /// <summary>
        /// Gets or Sets EncryptionKey
        /// </summary>
        [DataMember(Name = "encryption-key", EmitDefaultValue = false)]
        public string EncryptionKey { get; set; }

        /// <summary>
        /// Gets or Sets Export
        /// </summary>
        [DataMember(Name = "export", EmitDefaultValue = false)]
        public string Export { get; set; }

        /// <summary>
        /// Gets or Sets Fingerprint
        /// </summary>
        [DataMember(Name = "fingerprint", EmitDefaultValue = false)]
        public string Fingerprint { get; set; }

        /// <summary>
        /// Gets or Sets Format
        /// </summary>
        [DataMember(Name = "format", EmitDefaultValue = false)]
        public string Format { get; set; }

        /// <summary>
        /// Gets or Sets FsName
        /// </summary>
        [DataMember(Name = "fs-name", EmitDefaultValue = false)]
        public string FsName { get; set; }

        /// <summary>
        /// Gets or Sets Fuse
        /// </summary>
        [DataMember(Name = "fuse", EmitDefaultValue = true)]
        public bool Fuse { get; set; }

        /// <summary>
        /// Gets or Sets IsMountpoint
        /// </summary>
        [DataMember(Name = "is_mountpoint", EmitDefaultValue = false)]
        public string IsMountpoint { get; set; }

        /// <summary>
        /// Gets or Sets Iscsiprovider
        /// </summary>
        [DataMember(Name = "iscsiprovider", EmitDefaultValue = false)]
        public string Iscsiprovider { get; set; }

        /// <summary>
        /// Gets or Sets Keyring
        /// </summary>
        [DataMember(Name = "keyring", EmitDefaultValue = false)]
        public string Keyring { get; set; }

        /// <summary>
        /// Gets or Sets Krbd
        /// </summary>
        [DataMember(Name = "krbd", EmitDefaultValue = true)]
        public bool Krbd { get; set; }

        /// <summary>
        /// Gets or Sets LioTpg
        /// </summary>
        [DataMember(Name = "lio_tpg", EmitDefaultValue = false)]
        public string LioTpg { get; set; }

        /// <summary>
        /// Gets or Sets MasterPubkey
        /// </summary>
        [DataMember(Name = "master-pubkey", EmitDefaultValue = false)]
        public string MasterPubkey { get; set; }

        /// <summary>
        /// Gets or Sets MaxProtectedBackups
        /// </summary>
        [DataMember(Name = "max-protected-backups", EmitDefaultValue = false)]
        public int MaxProtectedBackups { get; set; }

        /// <summary>
        /// Gets or Sets Mkdir
        /// </summary>
        [DataMember(Name = "mkdir", EmitDefaultValue = true)]
        public bool Mkdir { get; set; }

        /// <summary>
        /// Gets or Sets Monhost
        /// </summary>
        [DataMember(Name = "monhost", EmitDefaultValue = false)]
        public string Monhost { get; set; }

        /// <summary>
        /// Gets or Sets Mountpoint
        /// </summary>
        [DataMember(Name = "mountpoint", EmitDefaultValue = false)]
        public string Mountpoint { get; set; }

        /// <summary>
        /// Gets or Sets Namespace
        /// </summary>
        [DataMember(Name = "namespace", EmitDefaultValue = false)]
        public string Namespace { get; set; }

        /// <summary>
        /// Gets or Sets Nocow
        /// </summary>
        [DataMember(Name = "nocow", EmitDefaultValue = true)]
        public bool Nocow { get; set; }

        /// <summary>
        /// Gets or Sets Nodes
        /// </summary>
        [DataMember(Name = "nodes", EmitDefaultValue = false)]
        public string Nodes { get; set; }

        /// <summary>
        /// Gets or Sets Nowritecache
        /// </summary>
        [DataMember(Name = "nowritecache", EmitDefaultValue = true)]
        public bool Nowritecache { get; set; }

        /// <summary>
        /// Gets or Sets Options
        /// </summary>
        [DataMember(Name = "options", EmitDefaultValue = false)]
        public string Options { get; set; }

        /// <summary>
        /// Gets or Sets Password
        /// </summary>
        [DataMember(Name = "password", EmitDefaultValue = false)]
        public string Password { get; set; }

        /// <summary>
        /// Gets or Sets Path
        /// </summary>
        [DataMember(Name = "path", EmitDefaultValue = false)]
        public string Path { get; set; }

        /// <summary>
        /// Gets or Sets Pool
        /// </summary>
        [DataMember(Name = "pool", EmitDefaultValue = false)]
        public string Pool { get; set; }

        /// <summary>
        /// Gets or Sets Port
        /// </summary>
        [DataMember(Name = "port", EmitDefaultValue = false)]
        public int Port { get; set; }

        /// <summary>
        /// Gets or Sets Portal
        /// </summary>
        [DataMember(Name = "portal", EmitDefaultValue = false)]
        public string Portal { get; set; }

        /// <summary>
        /// Gets or Sets Preallocation
        /// </summary>
        [DataMember(Name = "preallocation", EmitDefaultValue = false)]
        public string Preallocation { get; set; }

        /// <summary>
        /// Gets or Sets PruneBackups
        /// </summary>
        [DataMember(Name = "prune-backups", EmitDefaultValue = false)]
        public string PruneBackups { get; set; }

        /// <summary>
        /// Gets or Sets Saferemove
        /// </summary>
        [DataMember(Name = "saferemove", EmitDefaultValue = true)]
        public bool Saferemove { get; set; }

        /// <summary>
        /// Gets or Sets SaferemoveStepsize
        /// </summary>
        [DataMember(Name = "saferemove-stepsize", EmitDefaultValue = false)]
        public int SaferemoveStepsize { get; set; }

        /// <summary>
        /// Gets or Sets SaferemoveThroughput
        /// </summary>
        [DataMember(Name = "saferemove_throughput", EmitDefaultValue = false)]
        public string SaferemoveThroughput { get; set; }

        /// <summary>
        /// Gets or Sets Server
        /// </summary>
        [DataMember(Name = "server", EmitDefaultValue = false)]
        public string Server { get; set; }

        /// <summary>
        /// Gets or Sets Share
        /// </summary>
        [DataMember(Name = "share", EmitDefaultValue = false)]
        public string Share { get; set; }

        /// <summary>
        /// Gets or Sets Shared
        /// </summary>
        [DataMember(Name = "shared", EmitDefaultValue = true)]
        public bool Shared { get; set; }

        /// <summary>
        /// Gets or Sets SkipCertVerification
        /// </summary>
        [DataMember(Name = "skip-cert-verification", EmitDefaultValue = true)]
        public bool SkipCertVerification { get; set; }

        /// <summary>
        /// Gets or Sets Smbversion
        /// </summary>
        [DataMember(Name = "smbversion", EmitDefaultValue = false)]
        public string Smbversion { get; set; }

        /// <summary>
        /// Gets or Sets SnapshotAsVolumeChain
        /// </summary>
        [DataMember(Name = "snapshot-as-volume-chain", EmitDefaultValue = true)]
        public bool SnapshotAsVolumeChain { get; set; }

        /// <summary>
        /// Gets or Sets Sparse
        /// </summary>
        [DataMember(Name = "sparse", EmitDefaultValue = true)]
        public bool Sparse { get; set; }

        /// <summary>
        /// Gets or Sets Storage
        /// </summary>
        [DataMember(Name = "storage", IsRequired = true, EmitDefaultValue = true)]
        public string Storage { get; set; }

        /// <summary>
        /// Gets or Sets Subdir
        /// </summary>
        [DataMember(Name = "subdir", EmitDefaultValue = false)]
        public string Subdir { get; set; }

        /// <summary>
        /// Gets or Sets TaggedOnly
        /// </summary>
        [DataMember(Name = "tagged_only", EmitDefaultValue = true)]
        public bool TaggedOnly { get; set; }

        /// <summary>
        /// Gets or Sets Target
        /// </summary>
        [DataMember(Name = "target", EmitDefaultValue = false)]
        public string Target { get; set; }

        /// <summary>
        /// Gets or Sets Thinpool
        /// </summary>
        [DataMember(Name = "thinpool", EmitDefaultValue = false)]
        public string Thinpool { get; set; }

        /// <summary>
        /// Gets or Sets Type
        /// </summary>
        [DataMember(Name = "type", IsRequired = true, EmitDefaultValue = true)]
        public string Type { get; set; }

        /// <summary>
        /// Gets or Sets Username
        /// </summary>
        [DataMember(Name = "username", EmitDefaultValue = false)]
        public string Username { get; set; }

        /// <summary>
        /// Gets or Sets Vgname
        /// </summary>
        [DataMember(Name = "vgname", EmitDefaultValue = false)]
        public string Vgname { get; set; }

        /// <summary>
        /// Gets or Sets ZfsBasePath
        /// </summary>
        [DataMember(Name = "zfs-base-path", EmitDefaultValue = false)]
        public string ZfsBasePath { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class CreateStorageRequest {\n");
            sb.Append("  Authsupported: ").Append(Authsupported).Append("\n");
            sb.Append("  Base: ").Append(Base).Append("\n");
            sb.Append("  Blocksize: ").Append(Blocksize).Append("\n");
            sb.Append("  Bwlimit: ").Append(Bwlimit).Append("\n");
            sb.Append("  ComstarHg: ").Append(ComstarHg).Append("\n");
            sb.Append("  ComstarTg: ").Append(ComstarTg).Append("\n");
            sb.Append("  Content: ").Append(Content).Append("\n");
            sb.Append("  ContentDirs: ").Append(ContentDirs).Append("\n");
            sb.Append("  CreateBasePath: ").Append(CreateBasePath).Append("\n");
            sb.Append("  CreateSubdirs: ").Append(CreateSubdirs).Append("\n");
            sb.Append("  DataPool: ").Append(DataPool).Append("\n");
            sb.Append("  Datastore: ").Append(Datastore).Append("\n");
            sb.Append("  Disable: ").Append(Disable).Append("\n");
            sb.Append("  Domain: ").Append(Domain).Append("\n");
            sb.Append("  EncryptionKey: ").Append(EncryptionKey).Append("\n");
            sb.Append("  Export: ").Append(Export).Append("\n");
            sb.Append("  Fingerprint: ").Append(Fingerprint).Append("\n");
            sb.Append("  Format: ").Append(Format).Append("\n");
            sb.Append("  FsName: ").Append(FsName).Append("\n");
            sb.Append("  Fuse: ").Append(Fuse).Append("\n");
            sb.Append("  IsMountpoint: ").Append(IsMountpoint).Append("\n");
            sb.Append("  Iscsiprovider: ").Append(Iscsiprovider).Append("\n");
            sb.Append("  Keyring: ").Append(Keyring).Append("\n");
            sb.Append("  Krbd: ").Append(Krbd).Append("\n");
            sb.Append("  LioTpg: ").Append(LioTpg).Append("\n");
            sb.Append("  MasterPubkey: ").Append(MasterPubkey).Append("\n");
            sb.Append("  MaxProtectedBackups: ").Append(MaxProtectedBackups).Append("\n");
            sb.Append("  Mkdir: ").Append(Mkdir).Append("\n");
            sb.Append("  Monhost: ").Append(Monhost).Append("\n");
            sb.Append("  Mountpoint: ").Append(Mountpoint).Append("\n");
            sb.Append("  Namespace: ").Append(Namespace).Append("\n");
            sb.Append("  Nocow: ").Append(Nocow).Append("\n");
            sb.Append("  Nodes: ").Append(Nodes).Append("\n");
            sb.Append("  Nowritecache: ").Append(Nowritecache).Append("\n");
            sb.Append("  Options: ").Append(Options).Append("\n");
            sb.Append("  Password: ").Append(Password).Append("\n");
            sb.Append("  Path: ").Append(Path).Append("\n");
            sb.Append("  Pool: ").Append(Pool).Append("\n");
            sb.Append("  Port: ").Append(Port).Append("\n");
            sb.Append("  Portal: ").Append(Portal).Append("\n");
            sb.Append("  Preallocation: ").Append(Preallocation).Append("\n");
            sb.Append("  PruneBackups: ").Append(PruneBackups).Append("\n");
            sb.Append("  Saferemove: ").Append(Saferemove).Append("\n");
            sb.Append("  SaferemoveStepsize: ").Append(SaferemoveStepsize).Append("\n");
            sb.Append("  SaferemoveThroughput: ").Append(SaferemoveThroughput).Append("\n");
            sb.Append("  Server: ").Append(Server).Append("\n");
            sb.Append("  Share: ").Append(Share).Append("\n");
            sb.Append("  Shared: ").Append(Shared).Append("\n");
            sb.Append("  SkipCertVerification: ").Append(SkipCertVerification).Append("\n");
            sb.Append("  Smbversion: ").Append(Smbversion).Append("\n");
            sb.Append("  SnapshotAsVolumeChain: ").Append(SnapshotAsVolumeChain).Append("\n");
            sb.Append("  Sparse: ").Append(Sparse).Append("\n");
            sb.Append("  Storage: ").Append(Storage).Append("\n");
            sb.Append("  Subdir: ").Append(Subdir).Append("\n");
            sb.Append("  TaggedOnly: ").Append(TaggedOnly).Append("\n");
            sb.Append("  Target: ").Append(Target).Append("\n");
            sb.Append("  Thinpool: ").Append(Thinpool).Append("\n");
            sb.Append("  Type: ").Append(Type).Append("\n");
            sb.Append("  Username: ").Append(Username).Append("\n");
            sb.Append("  Vgname: ").Append(Vgname).Append("\n");
            sb.Append("  ZfsBasePath: ").Append(ZfsBasePath).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        IEnumerable<ValidationResult> IValidatableObject.Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}
