如何以编程方式从动态JObject获取属性

我正在使用NewtonSoft JObject解析JSON字符串。 如何以编程方式从动态对象获取值? 我想简化代码,不要为每个对象重复自己。

public ExampleObject GetExampleObject(string jsonString) { ExampleObject returnObject = new ExampleObject(); dynamic dynamicResult = JObject.Parse(jsonString); if (!ReferenceEquals(dynamicResult.album, null)) { //code block to extract to another method if possible returnObject.Id = dynamicResult.album.id; returnObject.Name = dynamicResult.album.name; returnObject.Description = dynamicResult.albumsdescription; //etc.. } else if(!ReferenceEquals(dynamicResult.photo, null)) { //duplicated here returnObject.Id = dynamicResult.photo.id; returnObject.Name = dynamicResult.photo.name; returnObject.Description = dynamicResult.photo.description; //etc.. } else if.. //etc.. return returnObject; } 

有没有什么方法可以将“if”语句中的代码块提取到单独的方法,例如:

 private void ExampleObject GetExampleObject([string of desired type goes here? album/photo/etc]) { ExampleObject returnObject = new ExampleObject(); returnObject.Id = dynamicResult.[something goes here?].id; returnObject.Name = dynamicResult.[something goes here?].name; //etc.. return returnObject; } 

它是否可能,因为我们不能将reflection用于动态对象。 或者我甚至正确使用JObject?

谢谢。

假设您使用的是Newtonsoft.Json.Linq.JObject,则无需使用动态。 JObject类可以使用字符串索引器,就像字典一样:

 JObject myResult = GetMyResult(); returnObject.Id = myResult["string here"]["id"]; 

希望这可以帮助!

使用动态关键字如下:

 var x = JsonConvert.DeserializeObject(response.Content.ReadAsStringAsync().Result);