Files
ersatztv/ErsatzTV.Infrastructure/Trakt/SnakeCasePropertyNamesContractResolver.cs
T
Jason DoveandGitHub e6446f9983 better trakt lists (#384)
* better trakt list support

* update dependencies

* revert unneeded brackets
2021-09-25 09:12:25 -05:00

48 lines
1.4 KiB
C#

using System;
using System.Collections.Generic;
using System.Globalization;
using System.Text;
using Newtonsoft.Json.Serialization;
namespace ErsatzTV.Infrastructure.Trakt
{
public class DeliminatorSeparatedPropertyNamesContractResolver : DefaultContractResolver
{
readonly string separator;
protected DeliminatorSeparatedPropertyNamesContractResolver(char separator)
{
this.separator = separator.ToString(CultureInfo.InvariantCulture);
}
protected override string ResolvePropertyName(string propertyName)
{
var parts = new List<string>();
var currentWord = new StringBuilder();
foreach (var c in propertyName.ToCharArray())
{
if (Char.IsUpper(c) && currentWord.Length > 0)
{
parts.Add(currentWord.ToString());
currentWord.Clear();
}
currentWord.Append(char.ToLower(c));
}
if (currentWord.Length > 0)
{
parts.Add(currentWord.ToString());
}
return String.Join(separator, parts.ToArray());
}
}
public class SnakeCasePropertyNamesContractResolver : DeliminatorSeparatedPropertyNamesContractResolver
{
public SnakeCasePropertyNamesContractResolver() : base('_') { }
}
}