Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 45 additions & 2 deletions RestSharp/Serializers/XmlSerializer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

using System;
using System.Collections;
using System.Globalization;
using System.Linq;
using System.Xml.Linq;
using RestSharp.Extensions;
Expand Down Expand Up @@ -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));
}

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