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
///