【问题标题】:Convert JSON String from Camel case to Pascal case using C#使用 C# 将 JSON 字符串从 Camel 案例转换为 Pascal 案例
【发布时间】:2017-11-14 14:58:43
【问题描述】:

我有一个 JSON 字符串,它有 Camel-case 形式的 Key,但我需要将 Key 转换为 Pascal-case。

实际的 JSON 字符串

string jsonString = "{\"personName\":{\"firstName\":\"Emma\",\"lastName\":\"Watson\"}}";

预期的 JSON 字符串:需要从上面的 JSON 字符串转换。

string jsonString = "{\"PersonName\":{\"FirstName\":\"Emma\",\"LastName\":\"Watson\"}}";

请帮助我如何使用 C# 进行转换。

【问题讨论】:

标签: c# json json.net jsonserializer


【解决方案1】:

因为我睡不着。

如果定义如下静态类的扩展方法...

public static class JsonExtensions
{
    public static void Capitalize(this JArray jArr)
    {
        foreach(var x in jArr.Cast<JToken>().ToList())
        {
            var childObj = x as JObject;
            if(childObj != null)
            {
                childObj.Capitalize();
                continue;
            }
            var childArr = x as JArray;
            if(childArr != null)
            {
                childArr.Capitalize();
                continue;
            }
        }
    }

    public static void Capitalize(this JObject jObj)
    {
        foreach(var kvp in jObj.Cast<KeyValuePair<string,JToken>>().ToList())
        {
            jObj.Remove(kvp.Key);
            var newKey = kvp.Key.Capitalize();
            var childObj = kvp.Value as JObject;
            if(childObj != null)
            {
                childObj.Capitalize();
                jObj.Add(newKey, childObj);
                return;
            }
            var childArr = kvp.Value as JArray;
            if(childArr != null)
            {
                childArr.Capitalize();
                jObj.Add(newKey, childArr);
                return;
            }
            jObj.Add(newKey, kvp.Value);
        }
    }

    public static string Capitalize(this string str)
    {
        if (string.IsNullOrEmpty(str))
        {
            throw new ArgumentException("empty string");
        }
        char[] arr = str.ToCharArray();
        arr[0] = char.ToUpper(arr[0]);
        return new string(arr);
    }
}

你可以:

void Main()
{
    string jsonString = 
        "{\"personName\":{\"firstName\":\"Emma\",\"lastName\":\"Watson\"}}";
    var jObj = JObject.Parse(jsonString);
    jObj.Capitalize();
    Console.WriteLine(jObj.ToString()); //yay!
}

【讨论】:

  • 试图编辑代码以修复一个小错误 - 集合迭代中的返回将阻止其他项目被迭代和大写,因此应该改为 continue
  • @eyal 有时间我会回顾一下
猜你喜欢
  • 2019-10-30
  • 2020-07-13
  • 2019-05-15
  • 1970-01-01
  • 2016-07-27
  • 1970-01-01
  • 1970-01-01
  • 2011-03-30
  • 1970-01-01
相关资源
最近更新 更多