将具有可变属性的JSON对象解析为强类型对象

{ "Profile": { "dProperty1": { "a": "value", "b": "value", "c": "value", "d": "value", "e": "value" }, "dProperty2": { "a": "value", "b": "value", "d": "value", "e": "value" }, "dProperty3": { "a": "value", "b": "value", "d": "value", "e": "value" } } } 

我有一个JSON对象,它可以有任意数量的动态属性。 所有属性都是主要由相同字段组成的对象。 如何将此JSON解析为C#中的强类型对象?

如果您必须具有强类型结果,我会将Profile反序列化为属性叠加的字典

 class AbscdeClass { public string A { get; set; } public string B { get; set; } public string C { get; set; } public string D { get; set; } public string E { get; set; } } class JsonBody { public Dictionary Profile { get; set; } } 

并将原始JSON文本解析为

 JsonBody json = JsonConvert.DeserializeObject(jsonString); 

我将整个树解析为JObject ,然后在适当的子对象上调用ToObject<> 。 示例代码:

 using System; using System.IO; using System.Linq; using Newtonsoft.Json.Linq; class Example { public string Name { get; set; } public int Age { get; set; } } class Program { static void Main(string[] args) { var json = File.ReadAllText("test.json"); var root = JObject.Parse(json); var profile = (JObject) root["Profile"]; var map = profile.Properties() .ToDictionary(p => p.Name, p => p.Value.ToObject()); foreach (var entry in map) { Console.WriteLine($"Key: {entry.Key}; Name: {entry.Value.Name}; Age: {entry.Value.Age}"); } } } 

JSON:

 { "Profile": { "dProperty1": { "name": "First", "age": 30, "extra": "Ignored" }, "dProperty2": { "name": "Second", "age": 25 }, "dProperty3": { "name": "Third", "age": 50 } } } 

结果:

 Key: dProperty1; Name: First; Age: 30 Key: dProperty2; Name: Second; Age: 25 Key: dProperty3; Name: Third; Age: 50