BlobAccessPolicy
An Access policy. 
                using Azure.Core;
using Azure.Storage.Common;
using System;
using System.ComponentModel;
using System.Xml;
using System.Xml.Linq;
namespace Azure.Storage.Blobs.Models
{
    [CodeGenModel("AccessPolicy")]
    public class BlobAccessPolicy : IXmlSerializable
    {
        [CodeGenMember("Start")]
        public DateTimeOffset? PolicyStartsOn { get; set; }
        [CodeGenMember("Expiry")]
        public DateTimeOffset? PolicyExpiresOn { get; set; }
        [CodeGenMember("Permission")]
        public string Permissions { get; set; }
        [EditorBrowsable(EditorBrowsableState.Never)]
        public DateTimeOffset StartsOn {
            get {
                if (PolicyStartsOn.HasValue)
                    return PolicyStartsOn.Value;
                return default(DateTimeOffset);
            }
            set {
                PolicyStartsOn = value;
            }
        }
        [EditorBrowsable(EditorBrowsableState.Never)]
        public DateTimeOffset ExpiresOn {
            get {
                if (PolicyExpiresOn.HasValue)
                    return PolicyExpiresOn.Value;
                return default(DateTimeOffset);
            }
            set {
                PolicyExpiresOn = value;
            }
        }
        public BlobAccessPolicy()
        {
        }
        internal BlobAccessPolicy(DateTimeOffset? policyStartsOn, DateTimeOffset? policyExpiresOn, string permissions)
        {
            PolicyStartsOn = policyStartsOn;
            PolicyExpiresOn = policyExpiresOn;
            Permissions = permissions;
        }
        void IXmlSerializable.Write(XmlWriter writer, string nameHint)
        {
            writer.WriteStartElement(nameHint ?? "AccessPolicy");
            if (Optional.IsDefined(PolicyStartsOn)) {
                writer.WriteStartElement("Start");
                writer.WriteValue(PolicyStartsOn.Value, "O");
                writer.WriteEndElement();
            }
            if (Optional.IsDefined(PolicyExpiresOn)) {
                writer.WriteStartElement("Expiry");
                writer.WriteValue(PolicyExpiresOn.Value, "O");
                writer.WriteEndElement();
            }
            if (Optional.IsDefined(Permissions)) {
                writer.WriteStartElement("Permission");
                writer.WriteValue(Permissions);
                writer.WriteEndElement();
            }
            writer.WriteEndElement();
        }
        internal static BlobAccessPolicy DeserializeBlobAccessPolicy(XElement element)
        {
            DateTimeOffset? policyStartsOn = null;
            DateTimeOffset? policyExpiresOn = null;
            string permissions = null;
            XElement xElement = element.Element("Start");
            if (xElement != null)
                policyStartsOn = xElement.GetDateTimeOffsetValue("O");
            XElement xElement2 = element.Element("Expiry");
            if (xElement2 != null)
                policyExpiresOn = xElement2.GetDateTimeOffsetValue("O");
            XElement xElement3 = element.Element("Permission");
            if (xElement3 != null)
                permissions = (string)xElement3;
            return new BlobAccessPolicy(policyStartsOn, policyExpiresOn, permissions);
        }
    }
}