取出Json String中的某些元素

本文关键字:元素 Json String 取出 | 更新日期: 2023-09-27 18:07:51

我有这个Json片段(简化)

[
  {
    "ReferenceId": 0,
    "MasterId": 1,    
    "BuildType": {
      "DisplayName": null,      
    },
    "Type": {
      "DisplayName": null,      
    },    
    "IsActive": true,
    "Name": "Product1",
    "Id":1
  },
  {
    "ReferenceId": 0,
    "MasterId": 1,    
    "BuildType": {
      "DisplayName": null,      
    },
    "Type": {
      "DisplayName": null,      
    },    
    "IsActive": false,
    "Name": "Product2",
    "Id":2
  }
]

我想拦截这个字符串删除所有的IsActive: false,并返回一个字符串,代表一个有效的Json数组

目前我有

JArray jArrayResponse = JArray.Parse(response);
//json = jArrayResponse.Where(x => x["IsActive"].ToString() == "true").ToString();

. tostring()只是给了我"System"。

取出Json String中的某些元素

你离我不远了。诀窍是将IEnumerable<JToken>Where子句传递到新的JArray,然后将转换为字符串。此外,您可以将IsActive JValues直接转换为bool:

JArray jArrayResponse = JArray.Parse(response);
var json = new JArray(jArrayResponse.Where(x => (bool)x["IsActive"])).ToString();

小提琴:https://dotnetfiddle.net/lt9iWS

我会说,您可以根据JSON在应用程序中创建类似的类型。

public class BuildType
{
    public string DisplayName { get; set; }
}
public class Type
{
    public string DisplayName { get; set; }
}
public class RootObject
{
    public int ReferenceId { get; set; }
    public int MasterId { get; set; }
    public BuildType BuildType { get; set; }
    public Type Type { get; set; }
    public bool IsActive { get; set; }
    public string Name { get; set; }
    public int Id { get; set; }
}

然后反序列化到那些类型

List<RootObject> ro = JsonConvert.DeserializeObject<List<RootObject>>(json);

执行像

这样的过滤器
var data = ro.Where(r => r.IsActive);