【问题标题】:Read a json object in a post call and get value from all the name value pairs在 post call 中读取一个 json 对象并从所有名称值对中获取值
【发布时间】:2022-01-15 11:27:20
【问题描述】:

JSON 解析为 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

}

【问题讨论】:

    标签: c# asp.net json


    【解决方案1】:

    您可以创建 List 对象

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

    如果你想要 List ,你必须创建这个类

    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】:

      您可以像这样使用ReflectionLinq 来获取NameValueObject 中属性的所有值:

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

      如果您想同时获取属性的名称和值,您可以像这样创建一个字典:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-03-06
        • 1970-01-01
        • 2016-01-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多