在 post call 中读取一个 json 对象并从所有名称值对中获取值

Posted

技术标签:

【中文标题】在 post call 中读取一个 json 对象并从所有名称值对中获取值【英文标题】:Read a json object in a post call and get value from all the name value pairs 【发布时间】: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


【问题讨论】:

【参考方案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】:

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

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

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

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

【讨论】:

以上是关于在 post call 中读取一个 json 对象并从所有名称值对中获取值的主要内容,如果未能解决你的问题,请参考以下文章

AJAX post call 在我的 JSON 文件中存储两次数据

RxAlamofire 使用 json 正文进行 post call

从 $_POST 中的 json 读取关联数组

判断是否为JSON对象

如何将请求参数转为json格式

从 SimpleHTTPServer Post 数据中读取 JSON