diff --git a/src/RestSharp/Extensions/StringExtensions.cs b/src/RestSharp/Extensions/StringExtensions.cs
index 59f909f01..de7c9b624 100644
--- a/src/RestSharp/Extensions/StringExtensions.cs
+++ b/src/RestSharp/Extensions/StringExtensions.cs
@@ -222,9 +222,12 @@ public static string ToPascalCase(this string text, bool removeUnderscores, Cult
string CaseWord(string word)
{
- var restOfWord = word.Substring(1).ToLower(culture);
+ var restOfWord = word.Substring(1);
var firstChar = char.ToUpper(word[0], culture);
+ if (restOfWord.IsUpperCase())
+ restOfWord = restOfWord.ToLower(culture);
+
return string.Concat(firstChar, restOfWord);
}
}
@@ -274,6 +277,13 @@ public static string AddDashes(this string pascalCasedWord)
"-"
);
+ ///
+ /// Checks to see if a string is all uppper case
+ ///
+ /// String to check
+ /// bool
+ public static bool IsUpperCase(this string inputString) => IsUpperCaseRegex.IsMatch(inputString);
+
///
/// Add an underscore prefix to a pascal-cased string
///
diff --git a/test/RestSharp.Tests/StringExtensionsTests.cs b/test/RestSharp.Tests/StringExtensionsTests.cs
index bae8813c7..8bc4d9263 100644
--- a/test/RestSharp.Tests/StringExtensionsTests.cs
+++ b/test/RestSharp.Tests/StringExtensionsTests.cs
@@ -66,6 +66,14 @@ public void ToPascalCase(string start, bool removeUnderscores, string finish)
Assert.AreEqual(finish, result);
}
+ [Test, TestCase("DueDate", "dueDate"), TestCase("ID", "id"), TestCase("IDENTIFIER", "identifier"), TestCase("primaryId", "primaryId"), TestCase("A", "a"), TestCase("ThisIsATest", "thisIsATest")]
+ public void ToCamelCase(string start, string finish)
+ {
+ var result = start.ToCamelCase(CultureInfo.InvariantCulture);
+
+ Assert.AreEqual(finish, result);
+ }
+
[Test]
public void Does_not_throw_on_invalid_encoding()
{