将String转换为Javascript安全且友好的变量名称

时间:2016-12-06 08:21:38

标签: c# json serialization

我有一个糟糕的数据库结构,没有命名约定,表和字段名称都到处都是。我需要向一个新开发的移动应用程序提供一些这样的数据,我想至少提出一个" clean"设计移动应用程序有关表和字段名称。

为此,我正在编写将创建" nice"移动应用程序使用的json对象。我不想手动去做'#34;对'"我的数据库中每个字段的名称,我想要一个自动化的过程来执行此操作。

因此,我尝试应用的规则是:所有表和字段名称都应该在lowerCamelCase中。

e.g。

Apple_Cart => appleCart
AppleCart => appleCart
Apple__Cart => appleCart
appleCart => appleCart
APPLE_CART => appleCart
Apple_Cart => appleCart
APPLECart => appleCart  (not sure about this one)

我不想在这里重新发明轮子,我确定Newtonsoft.Json或其他图书馆已经有代码来执行此操作?有人可以告诉我一个很好的方法来将字段和表名字符串转换为json标准格式。

这是我在决定重新发明轮子之前已经走了多远..

    /// <summary>
    /// Makes the json identifier.
    /// </summary>
    /// <param name="fieldName">Name of the field.</param>
    /// <returns></returns>
    private string MakeJsonIdentifier(string fieldName)
    {
        StringBuilder sb = new StringBuilder(fieldName);
        while (sb.ToString().Contains("_"))
        {
            int posOfFirstUs = sb.ToString().IndexOf("_", StringComparison.Ordinal);
            if (sb.ToString().Length > posOfFirstUs + 1)
            {
                sb[posOfFirstUs + 1] = char.ToUpperInvariant(sb.ToString()[posOfFirstUs + 1]);
                sb.Remove(posOfFirstUs, 1);
            }
        }
        return sb.ToString();
    }

1 个答案:

答案 0 :(得分:1)

您可以使用此功能获取lowerCamelCase,我也可以使用它并且效果很好。

Source code

function camelize(str) {
  return str.replace(/(?:^\w|[A-Z]|\b\w)/g, function(letter, index) {
    return index == 0 ? letter.toLowerCase() : letter.toUpperCase();
  }).replace(/\s+/g, '');
}

C#  您可以使用此方法,但必须设置分隔符。在我的情况下,我总是知道我使用了哪个分隔符。例如,如果我使用蛇案例我知道分隔符将是“_”并且我调用ToCamelCase(str,"_");。另外我认为如果你的字符串组合数量未知,那么很难知道分隔符的设置。

    public string ToCamelCase(string str,string sep)
    {
       str = str.Split(new[] {sep}, StringSplitOptions.RemoveEmptyEntries)
            .Select(s => char.ToUpperInvariant(s[0]) + s.Substring(1, s.Length - 1))
            .Aggregate(string.Empty, (s1, s2) => s1 + s2);
        return str.First().ToString().ToLowerInvariant() + str.Substring(1);
    }