#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));