Считывание объекта json в post-вызове и получение значения из всех пар имя-значение

#c# #asp.net #json

#c# #asp.net #json

Вопрос:

JSON анализируется в Post-вызов Web API (тело)

 {
    "Name1": "Value1",
    "Name2": "Value2",
    "Name3": "Value3",
    "Name4": "Value4"
}
 

Давайте назовем этот объект NameValueObject

  public class NameValueObject
    {
        public Name1 { get; set; }
        public Name2 { get; set; }
        public Name3 { get; set; }
        public Name4 { get; set; }
     }
 

Что я хотел бы видеть, так это возможность анализировать объект json и преобразовывать его в список

 public async Task<List<NameValueObject>> EvaluateJson ([FromBody] NameValueObject request)
{
  string serializerequest = JsonConvert.SerializeObject(request);
  //What do i next , I just to want to get a list of the values sent through the json object

}
 

Ответ №1:

вы можете создать список объектов < NameValueObject >

 var json= JsonConvert.Serialize(request);

List<NameValueObject> objects = JsonConvert.DeserializeObject<Dictionary<string, string>>(json)
.Select(i => new NameValueObject {Name=i.Key, Value=i.Value} )
.ToList();
 

или просто список значений

 var json= JsonConvert.Serialize(request);
                                     
List<string> values=JsonConvert.DeserializeObject<Dictionary<string, string>>(json)
 .Select(i => i.Value )
.ToList();               
 

если вам нужен список< NameValueObject > , вам нужно будет создать этот класс

 public class NameValueObject
{
    public string Name { get; set; }
    public string Value { get; set; }

}
 

или я бы предпочел это

 public async Task<List<NameValueObject>> EvaluateJson ([FromBody] JObject jsonObject)
{
   return  jsonObject.Properties()
            .Select ( i => new NameValueObject {
             Name =  i.Name, Value = (string) i.Value }).ToList();
}
 

или просто список значений

 List<string> Values = jsonObject.Properties().Select( i => (string) i.Value ).ToList();
 

Ответ №2:

Вы можете получить все значения ваших свойств в NameValueObject с помощью отражения и Linq следующим образом:

 var values = nameValueObject.GetType().GetProperties().Select(v => v.GetValue(nameValueObject));
 

Если вы хотите получить как имя свойства, так и значение, вы можете создать словарь, подобный этому:

 var dictionary = nameValueObject.GetType().GetProperties().ToDictionary(v => v.Name, v => v.GetValue(nameValueObject));