public void GetValuesFrom(object instance)
        {
            Properties = new Dictionary <string, object>();
            TypeName   = instance.GetType().Name;
            if (instance is IGuid guidable)
            {
                Guid = guidable.Guid;
            }

            PropertyInfo[] properties = instance.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);
            foreach (PropertyInfo propertyInfo in properties)
            {
                if (!propertyInfo.CanWrite || !propertyInfo.CanRead)
                {
                    continue;
                }

                Newtonsoft.Json.JsonIgnoreAttribute jsonIgnore = propertyInfo.GetCustomAttribute <Newtonsoft.Json.JsonIgnoreAttribute>();
                if (jsonIgnore != null)
                {
                    continue;
                }

                Properties.Add(propertyInfo.Name, propertyInfo.GetValue(instance));
            }
            // TODO: More here...
        }
        static bool IsIgnoreAttribute(PropertyInfo pi)
        {
            var piType = pi.PropertyType;

            object[] attrs = pi.GetCustomAttributes(true);
            foreach (object attr in attrs)
            {
                Newtonsoft.Json.JsonIgnoreAttribute jsonIgnoreAttr = attr as Newtonsoft.Json.JsonIgnoreAttribute;
                if (jsonIgnoreAttr != null)
                {
                    return(true);
                }

                System.Xml.Serialization.XmlIgnoreAttribute xmlIgnore = attr as System.Xml.Serialization.XmlIgnoreAttribute;
                if (xmlIgnore != null)
                {
                    return(true);
                }
            }

            return(false);
        }