取出Json字符串中的某些元素

时间:2016-09-19 22:04:30

标签: c# json json.net

我有这个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.Ienumberable",我甚至不确定Where子句是否正常工作。

2 个答案:

答案 0 :(得分:1)

你离我不远。诀窍是将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

答案 1 :(得分:0)

我想说,你根据你的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);