TribufuDotNet/Source/Tribufu.Serialization/NetworkAwareSnakeCaseNamingStrategy.cs

35 lines
974 B
C#

// Copyright (c) Tribufu. All Rights Reserved.
// SPDX-License-Identifier: MIT
using Newtonsoft.Json.Serialization;
using System.Text.RegularExpressions;
namespace Tribufu.Serialization
{
public class NetworkAwareSnakeCaseNamingStrategy : SnakeCaseNamingStrategy
{
private static readonly string[] KnownAcronyms = new string[] { "IPv4", "IPv6" };
protected override string ResolvePropertyName(string name)
{
if (string.IsNullOrEmpty(name))
{
return name;
}
foreach (var acr in KnownAcronyms)
{
name = Regex.Replace(name, acr, acr.ToLower());
}
var snake = base.ResolvePropertyName(name);
foreach (var acr in KnownAcronyms)
{
var lower = acr.ToLower();
snake = snake.Replace(lower.Replace("_", ""), lower);
}
return snake;
}
}
}