Skip to content

Commit

Permalink
Serialize numbers with invariant culture.
Browse files Browse the repository at this point in the history
  • Loading branch information
mbp committed Dec 9, 2013
1 parent 926bc9b commit 12d28dd
Showing 1 changed file with 42 additions and 0 deletions.
42 changes: 42 additions & 0 deletions RestSharp/Serializers/XmlSerializer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -179,10 +179,52 @@ public class XmlSerializer : ISerializer
{
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));
}

/// <summary>
/// Determines if a given object is numeric in any way
/// (can be integer, double, null, etc).
/// </summary>
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;
}

/// <summary>
/// Name of the root element to use when serializing
/// </summary>
Expand Down

0 comments on commit 12d28dd

Please sign in to comment.