2016-09-19 45 views
0

我有此JSON片段(簡體)取出某些元素在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:假的,並返回一個表示有效JSON數組的字符串

到目前爲止,我有

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

的的ToString()只是給了我「System.Ienumberable」,我甚至不能確定Where子句工作呢。

+1

你可以使用NewtonSoft,將其轉換爲一個對象不具有「IsActive」屬性,然後使用NewtonSoft重新序列化爲JSON。 – SteveJ

+0

你也可以做一個字符串替換,替換「/」IsActive /「:false」,但不知道你的整個Json結構,我不能說它是否會導致其他地方的問題。 – SteveJ

回答

1

你不遠了。竅門是將Where子句中的IEnumerable<JToken>轉換爲新的JArray,然後將轉換爲爲字符串。此外,您還可以直接投了IsActive JValues到bool

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

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

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