Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 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
2 changes: 1 addition & 1 deletion APIMatic.Core.Test/Utilities/CoreHelperTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -317,7 +317,7 @@ public void AppendQueryParameter_TabSeparatedCollectionParameter()
"dateTime"
};

string expected = $"{SERVER_URL}?dateTime=testtcollection";
string expected = $"{SERVER_URL}?dateTime=test\tcollection";
CoreHelper.AppendUrlWithQueryParameters(queryBuilder, GetParameters(parametersKeys, stringCollection), ArraySerialization.TSV);
string actual = queryBuilder.ToString();
Assert.AreEqual(expected, actual);
Expand Down
60 changes: 42 additions & 18 deletions APIMatic.Core/Utilities/CoreHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -413,7 +413,7 @@ private static char GetSeparator(ArraySerialization arraySerialization)
}
if (arraySerialization == ArraySerialization.TSV)
{
return 't';
return '\t';
}
return '&';
}
Expand Down Expand Up @@ -567,31 +567,55 @@ private static void HandleCustomType(List<KeyValuePair<string, object>> processe

private static void HandlePrimitiveTypes(List<KeyValuePair<string, object>> processedParameters, KeyValuePair<string, object> kvp)
{
if (kvp.Value is IList)
if (kvp.Value is IList list)
{
var list = kvp.Value as IList;
HandleListParameter(processedParameters, kvp, list);
}
else if (kvp.Value is IDictionary dictionary)
{
HandleDictionaryParameter(processedParameters, kvp, dictionary);
}
else
{
// Scalar type
processedParameters.Add(kvp);
}
}

if (list?.Count != 0)
{
var item = list[0];
private static void HandleListParameter(List<KeyValuePair<string, object>> processedParameters, KeyValuePair<string, object> kvp, IList list)
{
if (list?.Count != 0)
{
var item = list[0];

if (item.GetType().Namespace.StartsWith("System"))
{
// List of scalar type
processedParameters.Add(kvp);
}
else
{
// List of custom type
HandleCustomType(processedParameters, kvp);
}
HandleParameter(processedParameters, kvp, item);
}
}

private static void HandleDictionaryParameter(List<KeyValuePair<string, object>> processedParameters, KeyValuePair<string, object> kvp, IDictionary dictionary)
{
if (dictionary?.Count != 0)
{
var enumerator = dictionary.GetEnumerator();
if (enumerator.MoveNext())
{
var item = ((DictionaryEntry)enumerator.Current).Value;
HandleParameter(processedParameters, kvp, item);
}
}
else
}

private static void HandleParameter(List<KeyValuePair<string, object>> processedParameters, KeyValuePair<string, object> kvp, object entry)
{
if (entry.GetType().Namespace.StartsWith("System"))
{
// Scalar type
// List of scalar type
processedParameters.Add(kvp);
}
else
{
HandleCustomType(processedParameters, kvp);
}
}

/// <summary>
Expand Down