From 926bc9baf274f643b2cfc6a6d898f26265385102 Mon Sep 17 00:00:00 2001 From: Morten Brix Pedersen Date: Mon, 9 Dec 2013 13:07:58 +0100 Subject: [PATCH 1/2] Serialize DateTime and bool with InvariantCulture. --- RestSharp/Serializers/XmlSerializer.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/RestSharp/Serializers/XmlSerializer.cs b/RestSharp/Serializers/XmlSerializer.cs index 33ecb8eec..98a70a8c1 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,11 +173,11 @@ 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(); } return output.ToString(); From 12d28ddc98239c24707cd3018ac32a8ee8e805d0 Mon Sep 17 00:00:00 2001 From: Morten Brix Pedersen Date: Mon, 9 Dec 2013 13:11:51 +0100 Subject: [PATCH 2/2] Serialize numbers with invariant culture. --- RestSharp/Serializers/XmlSerializer.cs | 42 ++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/RestSharp/Serializers/XmlSerializer.cs b/RestSharp/Serializers/XmlSerializer.cs index 98a70a8c1..35422b694 100644 --- a/RestSharp/Serializers/XmlSerializer.cs +++ b/RestSharp/Serializers/XmlSerializer.cs @@ -179,10 +179,52 @@ private string GetSerializedValue(object obj) { { 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 ///