Skip to content

Commit 516c4a2

Browse files
committed
Merge pull request #480 from mbp/invariantculture-for-xml-serializer
Use InvariantCulture for XmlSerializer
2 parents dc4feb2 + 12d28dd commit 516c4a2

File tree

1 file changed

+45
-2
lines changed

1 file changed

+45
-2
lines changed

RestSharp/Serializers/XmlSerializer.cs

Lines changed: 45 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
using System;
1818
using System.Collections;
19+
using System.Globalization;
1920
using System.Linq;
2021
using System.Xml.Linq;
2122
using RestSharp.Extensions;
@@ -172,16 +173,58 @@ private string GetSerializedValue(object obj) {
172173

173174
if (obj is DateTime && DateFormat.HasValue())
174175
{
175-
output = ((DateTime) obj).ToString(DateFormat);
176+
output = ((DateTime) obj).ToString(DateFormat, CultureInfo.InvariantCulture);
176177
}
177178
if (obj is bool)
178179
{
179-
output = obj.ToString().ToLower();
180+
output = ((bool)obj).ToString(CultureInfo.InvariantCulture).ToLower();
181+
}
182+
if (IsNumeric(obj))
183+
{
184+
return SerializeNumber(obj);
180185
}
181186

182187
return output.ToString();
183188
}
184189

190+
static string SerializeNumber(object number)
191+
{
192+
if (number is long)
193+
return ((long)number).ToString(CultureInfo.InvariantCulture);
194+
else if (number is ulong)
195+
return ((ulong)number).ToString(CultureInfo.InvariantCulture);
196+
else if (number is int)
197+
return ((int)number).ToString(CultureInfo.InvariantCulture);
198+
else if (number is uint)
199+
return ((uint)number).ToString(CultureInfo.InvariantCulture);
200+
else if (number is decimal)
201+
return ((decimal)number).ToString(CultureInfo.InvariantCulture);
202+
else if (number is float)
203+
return ((float)number).ToString(CultureInfo.InvariantCulture);
204+
else
205+
return (Convert.ToDouble(number, CultureInfo.InvariantCulture).ToString("r", CultureInfo.InvariantCulture));
206+
}
207+
208+
/// <summary>
209+
/// Determines if a given object is numeric in any way
210+
/// (can be integer, double, null, etc).
211+
/// </summary>
212+
static bool IsNumeric(object value)
213+
{
214+
if (value is sbyte) return true;
215+
if (value is byte) return true;
216+
if (value is short) return true;
217+
if (value is ushort) return true;
218+
if (value is int) return true;
219+
if (value is uint) return true;
220+
if (value is long) return true;
221+
if (value is ulong) return true;
222+
if (value is float) return true;
223+
if (value is double) return true;
224+
if (value is decimal) return true;
225+
return false;
226+
}
227+
185228
/// <summary>
186229
/// Name of the root element to use when serializing
187230
/// </summary>

0 commit comments

Comments
 (0)