+2006-11-05 Vladimir Krasnov <vladimirk@mainsoft.com>
+
+ * SettingsPropertyValue.cs: fixed PropertyValue property when it
+ should be deserialized.
+
2006-10-13 Atsushi Enomoto <atsushi@ximian.com>
* ConfigurationSettings.cs :
#if NET_2_0
using System;
using System.IO;
+using System.ComponentModel;
using System.Runtime.Serialization.Formatters.Binary;
#if (XML_DEP)
+using System.Xml;
using System.Xml.Serialization;
#endif
public object PropertyValue {
get {
if (needPropertyValue) {
+ propertyValue = GetDeserializedValue ();
+ if (propertyValue == null) {
+ propertyValue = property.DefaultValue;
+ defaulted = true;
+ }
needPropertyValue = false;
- propertyValue = property.DefaultValue;
- defaulted = true;
}
#if notyet
}
set {
serializedValue = value;
+ needPropertyValue = true;
}
}
}
}
+ private object GetDeserializedValue ()
+ {
+ if (serializedValue == null)
+ return null;
+
+ object deserializedObject = null;
+
+ try {
+ switch (property.SerializeAs) {
+ case SettingsSerializeAs.String:
+ if (((string) serializedValue).Length > 0)
+ deserializedObject = TypeDescriptor.GetConverter (property.PropertyType).ConvertFromString ((string) serializedValue);
+ break;
+#if (XML_DEP)
+ case SettingsSerializeAs.Xml:
+ XmlSerializer serializer = new XmlSerializer (property.PropertyType);
+ StringReader str = new StringReader ((string) serializedValue);
+ deserializedObject = serializer.Deserialize (XmlReader.Create (str));
+ break;
+#endif
+ case SettingsSerializeAs.Binary:
+ BinaryFormatter bf = new BinaryFormatter ();
+ MemoryStream ms = new MemoryStream ((byte []) serializedValue);
+ deserializedObject = bf.Deserialize (ms);
+ break;
+ }
+ }
+ catch (Exception e) {
+ if (property.ThrowOnErrorDeserializing)
+ throw e;
+ }
+
+ return deserializedObject;
+ }
+
SettingsProperty property;
object propertyValue;
object serializedValue;
bool needSerializedValue;
bool needPropertyValue;
bool dirty;
- bool defaulted;
+ bool defaulted = false;
bool deserialized;
}
+2006-11-05 Vladimir Krasnov <vladimirk@mainsoft.com>
+
+ * SettingsPropertyValueTest.cs: added tests of value deserealization
+
2006-06-29 Atsushi Enomoto <atsushi@ximian.com>
* ApplicationSettingsBaseTest.cs : added test for bug #78654.
Assert.IsFalse (v.UsingDefaultValue, "A4");
}
+ [Test]
+ public void String_Deserialize ()
+ {
+ SettingsProperty p = new SettingsProperty ("property",
+ typeof (int),
+ null,
+ true,
+ 10,
+ SettingsSerializeAs.String,
+ null,
+ true,
+ false);
+
+ SettingsPropertyValue v = new SettingsPropertyValue (p);
+ v.SerializedValue = "123";
+
+ Assert.AreEqual (123, v.PropertyValue, "A1");
+ Assert.AreEqual (typeof(int), v.PropertyValue.GetType (), "A2");
+ Assert.AreEqual (false, v.UsingDefaultValue, "A3");
+ }
+
+ [Test]
+ public void Xml_Deserialize ()
+ {
+ SettingsProperty p = new SettingsProperty ("property",
+ typeof (int),
+ null,
+ true,
+ 10,
+ SettingsSerializeAs.Xml,
+ null,
+ true,
+ false);
+
+ SettingsPropertyValue v = new SettingsPropertyValue (p);
+ v.SerializedValue = "<?xml version=\"1.0\" encoding=\"utf-16\"?>\n<int>123</int>";
+
+ Assert.AreEqual (123, v.PropertyValue, "A1");
+ Assert.AreEqual (typeof(int), v.PropertyValue.GetType (), "A2");
+ Assert.AreEqual (false, v.UsingDefaultValue, "A3");
+ }
+
[Test]
public void String_Xml_Serialize ()
{