我如何从类型对象获取属性和值?

问题描述 投票:0回答:2

我有以下json:

{ 
        "Values":
         { 
           "value1": "test1", 
           "value2": "teste2" 
         }  
}

而且我必须获得特定的属性和值。这是我的代码:

   public MyMethod(object model)
   {
       var x = model.GetType().GetProperty("value1");
   }

但是始终为空。我如何得到这个?

asp.net-mvc asp.net-core
2个回答
0
投票

您的JSON是一个对象,其中包含一个名为Values的属性。该属性是一个对象,其中包含两个名为value1value2的属性。为了获得value1value2,首先必须获得Values

public MyMethod(object model)
{
    PropertyInfo modelProperty = model.GetType().GetProperty("Values");
    var modelValue = modelProperty.GetValue(model);
    // Get properties for value1 & value 2, then their values...
}

0
投票

您可以将其转换为dynamic类型并使用

public string MyMethod(object model)
{
   var x = ((dynamic)model).Values["value1"].Value;
   return x;
}

如果使用asp.net core 3.0,则需要添加对Microsoft.AspNetCore.Mvc.NewtonsoftJson的程序包引用,并更新Startup.ConfigureServices以调用AddNewtonsoftJson。

services.AddControllers().AddNewtonsoftJson();

我还发现了另一种使用JObject的解决方案,您需要为控制器添加参考using Newtonsoft.Json.Linq;

public string MyMethod(object model)
{
        var data = (JObject)model;
        //save all values in items
        var items = data.SelectToken("Values").Children().OfType<JProperty>().ToDictionary(p => p.Name, p => p.Value);
        foreach (var item in items)
        {
            if (item.Key == "value1")
            {
                var x = (string)item.Value;
            }
        }
 }
© www.soinside.com 2019 - 2024. All rights reserved.