2016-03-29 5 views
0

Ich habe einen JSON:entfernen spezifischen Eigenschaften von JSON-Objekt

{ 
    "scbs_currentstatus": "", 
     "scbs_primaryissue": "", 
     "_umb_id": "Test", 
     "_umb_creator": "Admin", 
     "_umb_createdate": "0001-01-01 00:00:00", 
     "_umb_updatedate": "0001-01-01 00:00:00", 
     "_umb_doctype": "Test", 
     "_umb_login": "Test", 
     "_umb_email": "Test", 
     "_umb_password": { 
     "newPassword": "Test", 
     "oldPassword": null, 
     "reset": null, 
     "answer": null 
     }, 
     "_umb_membergroup": { 
     " User": false, 
     "Line User": true, 
     "Callback User": false, 
     "Su User": false, 
     }, 
     "umbracoMemberComments": "Test", 
     "umbracoMemberFailedPasswordAttempts": "" 

    } 

Iam versuchen, alle Eigenschaften mit "umb_" .ist dies möglich in json.net beginnen zu entfernen?

und Ausgang wird wie: aber nicht alle auf einmal

{ 
     "scbs_currentstatus": "", 
      "scbs_primaryissue": "", 
      "umbracoMemberComments": "Test", 
      "umbracoMemberFailedPasswordAttempts": "" 
} 

entfernen mit ich in der Lage bin, es zu tun.

result.Property("_umb_id").Remove(); 

ein Vorschlag bitte?

Antwort

3

Sie die Zeichenfolge zuerst analysieren kann:

var temp = JArray.Parse(json); 
temp.Descendants() 
    .OfType<JProperty>() 
    .Where(attr => attr.Name.StartsWith("_umb_")) 
    .ToList() // you should call ToList because you're about to changing the result, which is not possible if it is IEnumerable 
    .ForEach(attr => attr.Remove()); // removing unwanted attributes 
json = temp.ToString(); // backing result to json 

UPDATE OR:

result.Properties() 
    .Where(attr => attr.Name.StartsWith("_umb_")) 
    .ToList() 
    .ForEach(attr => attr.Remove()); 

UPDATE # 2

Sie mehr Bedingungen in where Klausel angeben:

.Where(attr => attr.Name.StartsWith("_umb_") && some_other_condition) 

ODER

.Where(attr => attr.Name.StartsWith("_umb_") || some_other_condition) 

oder was auch immer Sie brauchen.

+0

vielen dank @Javad :) – Harshit

+0

@Harshit du bist willkommen. Sie können auch die Antwort abstimmen;) –

+0

@javed. Können wir mehr als eine Bedingung angeben? Angenommen, die Felder enthalten "umbracoMember" in der Eigenschaft. – Harshit

-1

Ich habe gerade das Deserialisieren zu JObject beendet und rekursiv das durchgeschleift, um unerwünschte Felder zu entfernen. Hier ist die Funktion für Interessierte.

private void removeFields(JToken token, string[] fields) 
{ 
JContainer container = token as JContainer; 
if (container == null) return; 

List<JToken> removeList = new List<JToken>(); 
foreach (JToken el in container.Children()) 
{ 
    JProperty p = el as JProperty; 
    string propertyName = p.hasOwnProperty(key); 

    if (p != null && fields.Contains(p.propertyName) && p.propertyName.substring(0,4) == "_umb") 
    { 
     removeList.Add(el); 
    } 
    removeFields(el, fields); 
} 

foreach (JToken el in removeList) 
{ 
    el.Remove(); 
} 
} 
Verwandte Themen