diff --git a/RestSharp/Serializers/XmlSerializer.cs b/RestSharp/Serializers/XmlSerializer.cs index 33ecb8eec..35422b694 100644 --- a/RestSharp/Serializers/XmlSerializer.cs +++ b/RestSharp/Serializers/XmlSerializer.cs @@ -16,6 +16,7 @@ using System; using System.Collections; +using System.Globalization; using System.Linq; using System.Xml.Linq; using RestSharp.Extensions; @@ -172,16 +173,58 @@ private string GetSerializedValue(object obj) { if (obj is DateTime && DateFormat.HasValue()) { - output = ((DateTime) obj).ToString(DateFormat); + output = ((DateTime) obj).ToString(DateFormat, CultureInfo.InvariantCulture); } if (obj is bool) { - output = obj.ToString().ToLower(); + output = ((bool)obj).ToString(CultureInfo.InvariantCulture).ToLower(); + } + if (IsNumeric(obj)) + { + return SerializeNumber(obj); } return output.ToString(); } + static string SerializeNumber(object number) + { + if (number is long) + return ((long)number).ToString(CultureInfo.InvariantCulture); + else if (number is ulong) + return ((ulong)number).ToString(CultureInfo.InvariantCulture); + else if (number is int) + return ((int)number).ToString(CultureInfo.InvariantCulture); + else if (number is uint) + return ((uint)number).ToString(CultureInfo.InvariantCulture); + else if (number is decimal) + return ((decimal)number).ToString(CultureInfo.InvariantCulture); + else if (number is float) + return ((float)number).ToString(CultureInfo.InvariantCulture); + else + return (Convert.ToDouble(number, CultureInfo.InvariantCulture).ToString("r", CultureInfo.InvariantCulture)); + } + + /// + /// Determines if a given object is numeric in any way + /// (can be integer, double, null, etc). + /// + static bool IsNumeric(object value) + { + if (value is sbyte) return true; + if (value is byte) return true; + if (value is short) return true; + if (value is ushort) return true; + if (value is int) return true; + if (value is uint) return true; + if (value is long) return true; + if (value is ulong) return true; + if (value is float) return true; + if (value is double) return true; + if (value is decimal) return true; + return false; + } + /// /// Name of the root element to use when serializing ///