internal static string FromDateTime (DateTime value)
{
+#if NET_2_0
+ return XmlConvert.ToString (value, XmlDateTimeSerializationMode.RoundtripKind);
+#else
return XmlConvert.ToString (value, "yyyy-MM-ddTHH:mm:ss.fffffffzzz");
+#endif
}
internal static string FromTime (DateTime value)
internal static DateTime ToDateTime (string value)
{
+#if NET_2_0
+ return XmlConvert.ToDateTime (value, XmlDateTimeSerializationMode.RoundtripKind);
+#else
return XmlConvert.ToDateTime (value);
+#endif
}
internal static DateTime ToTime (string value)
case "boolean": return XmlConvert.ToString ((bool)value);
case "unsignedByte": return XmlConvert.ToString ((byte)value);
case "char": return XmlConvert.ToString ((int)(char)value);
+#if NET_2_0
+ case "dateTime": return XmlConvert.ToString ((DateTime)value, XmlDateTimeSerializationMode.RoundtripKind);
+ case "date": return ((DateTime)value).ToString("yyyy-MM-dd", CultureInfo.InvariantCulture);
+ case "time": return ((DateTime)value).ToString("HH:mm:ss.FFFFFFF", CultureInfo.InvariantCulture);
+#else
case "dateTime": return XmlConvert.ToString ((DateTime)value);
case "date": return ((DateTime)value).ToString("yyyy-MM-dd", CultureInfo.InvariantCulture);
case "time": return ((DateTime)value).ToString("HH:mm:ss.fffffffzzz", CultureInfo.InvariantCulture);
+#endif
case "decimal": return XmlConvert.ToString ((decimal)value);
case "double": return XmlConvert.ToString ((double)value);
case "short": return XmlConvert.ToString ((Int16)value);
case "base64":
case "base64Binary": return value == null ? String.Empty : Convert.ToBase64String ((byte[])value);
case "hexBinary": return value == null ? String.Empty : XmlConvert.ToBinHexString ((byte[]) value);
- case "duration": return XmlConvert.ToString ((TimeSpan) value);
+ case "duration": return (string) value;
default: return value is IFormattable ? ((IFormattable) value).ToString (null, CultureInfo.InvariantCulture) : value.ToString ();
}
}
case "boolean": return XmlConvert.ToBoolean (value);
case "unsignedByte": return XmlConvert.ToByte (value);
case "char": return (char)XmlConvert.ToInt32 (value);
+#if NET_2_0
+ case "dateTime": return XmlConvert.ToDateTime (value, XmlDateTimeSerializationMode.RoundtripKind);
+ case "date": return XmlConvert.ToDateTime (value).Date;
+ case "time": return DateTime.ParseExact (value, "HH:mm:ss.FFFFFFF", null);
+#else
case "dateTime": return XmlConvert.ToDateTime (value);
- case "date": return DateTime.ParseExact (value, "yyyy-MM-dd", null);
+ case "date": return XmlConvert.ToDateTime (value).Date;
case "time": return DateTime.ParseExact (value, "HH:mm:ss.fffffffzzz", null);
+#endif
case "decimal": return XmlConvert.ToDecimal (value);
case "double": return XmlConvert.ToDouble (value);
case "short": return XmlConvert.ToInt16 (value);
case "base64":
case "base64Binary": return Convert.FromBase64String (value);
case "hexBinary": return XmlConvert.FromBinHexString (value);
- case "duration": return XmlConvert.ToTimeSpan (value);
+ case "duration": return value;
default:
if (type.Type != null)
- return Convert.ChangeType (value, type.Type);
+ return Convert.ChangeType (value, type.Type, null);
else
return value;
}
internal static string GenerateToXmlString (TypeData type, string value)
{
+ if (type.NullableOverride)
+ return "(" + value + " != null ? " + GenerateToXmlStringCore (type, value) + " : null)";
+ else
+ return GenerateToXmlStringCore (type, value);
+ }
+
+ static string GenerateToXmlStringCore (TypeData type, string value)
+ {
+ if (type.NullableOverride)
+ value = value + ".Value";
switch (type.XmlType)
{
case "boolean": return "(" + value + "?\"true\":\"false\")";
case "unsignedByte": return value + ".ToString(CultureInfo.InvariantCulture)";
case "char": return "((int)(" + value + ")).ToString(CultureInfo.InvariantCulture)";
+#if NET_2_0
+ case "dateTime": return "XmlConvert.ToString (" + value + ", XmlDateTimeSerializationMode.RoundtripKind)";
+ case "date": return value + ".ToString(\"yyyy-MM-dd\", CultureInfo.InvariantCulture)";
+ case "time": return value + ".ToString(\"HH:mm:ss.FFFFFFF\", CultureInfo.InvariantCulture)";
+#else
case "dateTime": return value + ".ToString(\"yyyy-MM-ddTHH:mm:ss.fffffffzzz\", CultureInfo.InvariantCulture)";
case "date": return value + ".ToString(\"yyyy-MM-dd\", CultureInfo.InvariantCulture)";
case "time": return value + ".ToString(\"HH:mm:ss.fffffffzzz\", CultureInfo.InvariantCulture)";
+#endif
case "decimal": return "XmlConvert.ToString (" + value + ")";
case "double": return "XmlConvert.ToString (" + value + ")";
case "short": return value + ".ToString(CultureInfo.InvariantCulture)";
case "guid": return "XmlConvert.ToString (" + value + ")";
case "base64":
case "base64Binary": return value + " == null ? String.Empty : Convert.ToBase64String (" + value + ")";
- case "duration": return "XmlConvert.ToString (" + value + ")";
+ case "hexBinary": return value + " == null ? String.Empty : ToBinHexString (" + value + ")";
+ case "duration": return value;
case "NMTOKEN":
case "Name":
case "NCName":
}
internal static string GenerateFromXmlString (TypeData type, string value)
+ {
+ if (type.NullableOverride)
+ return String.Concat ("(", value, " != null ? (", type.CSharpName, "?)", GenerateFromXmlStringCore (type, value), " : null)");
+ else
+ return GenerateFromXmlStringCore (type, value);
+ }
+
+ static string GenerateFromXmlStringCore (TypeData type, string value)
{
switch (type.XmlType)
{
case "boolean": return "XmlConvert.ToBoolean (" + value + ")";
case "unsignedByte": return "byte.Parse (" + value + ", CultureInfo.InvariantCulture)";
case "char": return "(char)Int32.Parse (" + value + ", CultureInfo.InvariantCulture)";
+#if NET_2_0
+ case "dateTime": return "XmlConvert.ToDateTime (" + value + ", XmlDateTimeSerializationMode.RoundtripKind)";
+ case "date": return "XmlConvert.ToDateTime (" + value + ").Date";
+ case "time": return "DateTime.ParseExact (" + value + ", \"HH:mm:ss.FFFFFFF\", CultureInfo.InvariantCulture)";
+#else
case "dateTime": return "XmlConvert.ToDateTime (" + value + ")";
- case "date": return "DateTime.ParseExact (" + value + ", \"yyyy-MM-dd\", CultureInfo.InvariantCulture)";
+ case "date": return "XmlConvert.ToDateTime (" + value + ").Date";
case "time": return "DateTime.ParseExact (" + value + ", \"HH:mm:ss.fffffffzzz\", CultureInfo.InvariantCulture)";
+#endif
case "decimal": return "Decimal.Parse (" + value + ", CultureInfo.InvariantCulture)";
case "double": return "XmlConvert.ToDouble (" + value + ")";
case "short": return "Int16.Parse (" + value + ", CultureInfo.InvariantCulture)";
case "guid": return "XmlConvert.ToGuid (" + value + ")";
case "base64:":
case "base64Binary": return "Convert.FromBase64String (" + value + ")";
- case "duration": return "XmlConvert.ToTimeSpan (" + value + ")";
+ case "hexBinary": return "FromBinHexString (" + value + ")";
+ case "duration": return value;
default: return value;
}
}