在 ExpandoObject 中将 Camel Case JSON 反序列化为 Pascal Case

San*_*ndy 6 c# json.net

我有这样的驼峰式 JSON:

{
  "name": "John",
  "age": 55
}
Run Code Online (Sandbox Code Playgroud)

我需要将其反序列化为 ExpandoObject,但我希望属性采用 Pascal Case。所以我应该能够这样做:

dynamic obj = JsonConvert.DeserializeObject<ExpandoObject>(json);
Console.WriteLine($"{obj.Name} is {obj.Age}");
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

EdS*_*dSF 2

我的业务代码使用动态属性。所以我需要使用某种形式的 DynamicObject。

恕我直言 - 我明白这一点,至少对我来说,它并不能解释套管的需要......

无论如何,这是一次有趣的欢乐时光练习……我认为这很糟糕,可能永远不会见光:)

var json = "{ \"name\": \"John\",  \"age\": 55, \"fooBoo\": 0}";

JObject obj = JObject.Parse(json);

dynamic foo = new ExpandoObject();
var bar = (IDictionary<string, object>) foo;
foreach (JProperty property in obj.Properties())
{
    var janky = property.Name.Substring(0, 1).ToUpperInvariant() + property.Name.Substring(1);
    bar.Add(janky, property.Value);
}

Console.WriteLine($"{foo.Name} , {foo.Age}, {foo.FooBoo}");
Run Code Online (Sandbox Code Playgroud)

TGIF :)