【问题标题】:how do i filter this json after deserialization?反序列化后如何过滤这个json?
【发布时间】:2021-08-22 10:28:50
【问题描述】:
responsestring = 

 "{\"resultList\": 
      [{\"modelId\":11,\"modelName\":\"indvsves12\",\"modelLang\":\"en-US\",\"modelVersion\":6,\"scoreMap\":{\"individual\":0.5,\"vessel\":0.5},\"bestCategory\":\"vessel\"}]}"

我如何在反序列化后过滤这个 json? 我的反序列化代码是

responsestring = response.Content.ReadAsStringAsync().Result;   
                        ClassifierResponse Response = JsonConvert.DeserializeObject<ClassifierResponse>(responsestring);


                    
                        

【问题讨论】:

  • 你需要使用什么过滤器?

标签: c# json filter deserialization


【解决方案1】:

我自己找到了答案,我可以像这样访问响应值:Response.ResultList[0].Scoremap.Indivdual。

【讨论】:

    【解决方案2】:

    您也可以使用 LINQ 查询

    var x = from x in Response.ResultList where x.ModelName == "indvsves12" select x.ModelName ;
    

    使用foreach 提取多条记录。

    编辑:

    作为评论中的讨论,您需要从scoremap 获取记录 并且您在反序列化时遇到错误

    首先更新你的类

     public class Scoremap
    {
        public double Individual { get; set; }
        public double Vessel { get; set; }
    }
    

    到

    public class Scoremap
    {
        public double Individual { get; set; }
        public double Vessel { get; set; }
        public string bestCategory { get; set; }
    }
    

    它将解决错误反序列化

    那么你就可以使用

    var x = from x in Response.ResultList where x.ModelName == "indvsves12" select x;
        foreach(var items in x)
        {
          string val1 = item.scoreMap.individual;
          string val2 = item.scoreMap.vessel;
          string val3 = item.scoreMap.bestCategory;
        }
    

    【讨论】:

    • 我只想访问个人和船只的分数,以便在 if 条件下比较它们并使用它@Ahmed
    • 当我将类更改为公共 Resultlist resultList {get;set;} 时,我可以通过 Response.ResultList.modelID 访问响应中的值。但是当我这样做时,我在反序列化部分出现错误,因为无法将当前 JSON 对象(例如 {"name":"value"})反序列化为类型 'System.Collections.Generic.List`1',因为该类型需要 JSON 数组(例如 [1,2,3])正确反序列化。
    • 请帮助我从响应@Ahmed@Guru Stron @r2018 中获取个人和船只得分值和最佳类别的代码
    • 你要提取内部对象Scoremap的值对吗?
    • 更新您的scoremap 类并为bestCategory 添加属性,因为当json 对象尝试将其与您的动态类映射时,它没有找到用于映射bestCategory 的属性,这就是它显示错误的原因添加此属性public string bestCategory{ get; set; } 用于解决您的解决方案
    【解决方案3】:

    不确定您是否需要对象或特定属性值。所以提供两个例子。

    string responsestring ="{\"resultList\": [{\"modelId\":11,\"modelName\":\"indvsves12\",\"modelLang\":\"en - US\",\"modelVersion\":6,\"scoreMap\":{\"individual\":0.5,\"vessel\":0.5},\"bestCategory\":\"vessel\"}]}";
    
    //responsestring = response.Content.ReadAsStringAsync().Result;
    ClassifierResponse Response = JsonConvert.DeserializeObject<ClassifierResponse>(responsestring);
    
    ResultList filObject = Response.Resultlist.Find(x => x.ModelId == 11);
    string modelName = Response.Resultlist.Find(x => x.ModelId == 11).ModelName;
    

    【讨论】:

    • 查找不是大数据的好方法
    【解决方案4】:

    请指定您需要哪些过滤器,否则,这是一个悬而未决的问题。

    假设您正在 ResultList 上寻找过滤器,因为这是我能看到的唯一可行的选项。反序列化后,您可以像使用任何其他 LINQ 对象一样使用它。例如(代码未测试):

    var x = Response.ResultList.Where(d => d.ModelName == "indvsves12").ToList();
    

    【讨论】:

    • 我想要过滤并获取响应中的每个值并将其映射到响应类属性。然后比较个人和船只的分数。@Guru Stron
    猜你喜欢
    • 1970-01-01
    • 2012-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-01
    • 1970-01-01
    相关资源
    最近更新 更多