// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
-#if NET_2_0
using System;
+using System.Globalization;
using System.IO;
using System.ComponentModel;
using System.Runtime.Serialization.Formatters.Binary;
return deserialized;
}
set {
- deserialized = true;
+ deserialized = value;
}
}
needPropertyValue = false;
}
-#if notyet
- /* LAMESPEC: the msdn2 docs say that
- * for object types this
- * pessimistically sets Dirty == true.
- * tests, however, point out that that
- * is not the case. */
- if (!property.PropertyType.IsValueType)
+ if (propertyValue != null &&
+ !(propertyValue is string) &&
+ !(propertyValue is DateTime) &&
+ !property.PropertyType.IsPrimitive)
dirty = true;
-#endif
return propertyValue;
}
}
}
- [MonoTODO ("string type converter?")]
public object SerializedValue {
get {
if (needSerializedValue) {
switch (property.SerializeAs)
{
case SettingsSerializeAs.String:
- /* the docs say use a string type converter.. this means what? */
- serializedValue = propertyValue.ToString();
+ serializedValue = TypeDescriptor.GetConverter (property.PropertyType).ConvertToInvariantString (propertyValue);
break;
#if (XML_DEP)
case SettingsSerializeAs.Xml:
- XmlSerializer serializer = new XmlSerializer (propertyValue.GetType());
- StringWriter w = new StringWriter();
-
- serializer.Serialize (w, propertyValue);
- serializedValue = w.ToString();
+ if (propertyValue != null) {
+ XmlSerializer serializer = new XmlSerializer (propertyValue.GetType ());
+ StringWriter w = new StringWriter(CultureInfo.InvariantCulture);
+
+ serializer.Serialize (w, propertyValue);
+ serializedValue = w.ToString();
+ }
+ else
+ serializedValue = null;
break;
#endif
case SettingsSerializeAs.Binary:
- BinaryFormatter bf = new BinaryFormatter ();
- MemoryStream ms = new MemoryStream ();
- bf.Serialize (ms, propertyValue);
- serializedValue = ms.ToArray();
+ if (propertyValue != null) {
+ BinaryFormatter bf = new BinaryFormatter ();
+ MemoryStream ms = new MemoryStream ();
+ bf.Serialize (ms, propertyValue);
+ serializedValue = ms.ToArray();
+ }
+ else
+ serializedValue = null;
break;
default:
serializedValue = null;
}
}
+ internal object Reset ()
+ {
+ propertyValue = GetDeserializedDefaultValue ();
+ dirty = true;
+ defaulted = true;
+ needPropertyValue = true;
+ return propertyValue;
+ }
+
private object GetDeserializedDefaultValue ()
{
- if (property.DefaultValue == null ||
- (property.DefaultValue is string && ((string) property.DefaultValue).Length == 0))
- return Activator.CreateInstance (property.PropertyType);
+ if (property.DefaultValue == null)
+ if (property.PropertyType != null && property.PropertyType.IsValueType)
+ return Activator.CreateInstance (property.PropertyType);
+ else
+ return null;
+
+ if (property.DefaultValue is string && ((string) property.DefaultValue).Length == 0)
+ if (property.PropertyType != typeof (string))
+ return Activator.CreateInstance (property.PropertyType);
+ else
+ return string.Empty;
if (property.DefaultValue is string && ((string) property.DefaultValue).Length > 0)
return GetDeserializedValue (property.DefaultValue);
if (!property.PropertyType.IsAssignableFrom (property.DefaultValue.GetType ())) {
TypeConverter converter = TypeDescriptor.GetConverter (property.PropertyType);
- return converter.ConvertFrom (property.DefaultValue);
+ return converter.ConvertFrom (null, CultureInfo.InvariantCulture, property.DefaultValue);
}
return property.DefaultValue;
}
try {
switch (property.SerializeAs) {
case SettingsSerializeAs.String:
- if (serializedValue is string && ((string) serializedValue).Length > 0)
- deserializedObject = TypeDescriptor.GetConverter (property.PropertyType).ConvertFromString ((string) serializedValue);
+ if (serializedValue is string)
+ deserializedObject = TypeDescriptor.GetConverter (property.PropertyType).ConvertFromInvariantString ((string) serializedValue);
break;
#if (XML_DEP)
case SettingsSerializeAs.Xml:
#endif
case SettingsSerializeAs.Binary:
BinaryFormatter bf = new BinaryFormatter ();
- MemoryStream ms = new MemoryStream ((byte []) serializedValue);
+ MemoryStream ms;
+ if (serializedValue is string)
+ ms = new MemoryStream (Convert.FromBase64String ((string) serializedValue));
+ else
+ ms = new MemoryStream ((byte []) serializedValue);
deserializedObject = bf.Deserialize (ms);
break;
}
}
-#endif