public static bool isDefaultLeafValue(object from, string propertyName, object leafValue, LeafDefaultSet LeafDefaultSet)
        {
            // check the attribute
            FieldInfo fieldInfo = from.GetType().GetField(propertyName);
            if (fieldInfo == null) return false;
            object[] dmas = fieldInfo.GetCustomAttributes(typeof(DataMemberAttribute), true);
            //check whether we are emitting default values
            if (dmas.Length == 0 || ((DataMemberAttribute)dmas[0]).EmitDefaultValue) return false;

            if (leafValue == null) return true;
            Type leafType=leafValue.GetType();
            if (Nullable.GetUnderlyingType(leafType)!=null)
                {
                leafType=Nullable.GetUnderlyingType(leafType);
                }
            if (NumberTypes.Contains(leafType))
                return leafValue.Equals((int)0) || leafValue.Equals((double)0.0) || leafValue.Equals((uint)0) || leafValue.Equals((float)0);
            if (leafType == typeof(bool) || leafType == typeof(Boolean)) return !((bool)leafValue);
            return false;
        }
        public static bool isDefaultLeafValue(object from, string propertyName, object leafValue, LeafDefaultSet LeafDefaultSet)
        {
            // check the attribute
            FieldInfo fieldInfo = from.GetType().GetField(propertyName);

            if (fieldInfo == null)
            {
                return(false);
            }
            object[] dmas = fieldInfo.GetCustomAttributes(typeof(DataMemberAttribute), true);
            //check whether we are emitting default values
            if (dmas.Length == 0 || ((DataMemberAttribute)dmas[0]).EmitDefaultValue)
            {
                return(false);
            }

            if (leafValue == null)
            {
                return(true);
            }
            Type leafType = leafValue.GetType();

            if (Nullable.GetUnderlyingType(leafType) != null)
            {
                leafType = Nullable.GetUnderlyingType(leafType);
            }
            if (NumberTypes.Contains(leafType))
            {
                return(leafValue.Equals((int)0) || leafValue.Equals((double)0.0) || leafValue.Equals((uint)0) || leafValue.Equals((float)0));
            }
            if (leafType == typeof(bool) || leafType == typeof(Boolean))
            {
                return(!((bool)leafValue));
            }
            return(false);
        }