2016-09-01 37 views
0

我想更新一个类似where select的JToken值。C#Newtonsoft JSON更新Where

JSON: 
[ 
    { 
    "Uid": "7775", 
    "MessageID": "<[email protected]>", 
    "Mailbox": "INBOX", 
    "Subject": "asdfdsf", 
    "Seen": true, 
    "Date": "31.08.2016 17:24:42", 
    "Name": "asdasdasd", 
    "Attachments": "0" 
    }, 
    { 
    "Uid": "7776", 
    "MessageID": "<[email protected]>", 
    "Mailbox": "INBOX", 
    "Subject": "sdfdsf", 
    "Seen": true, 
    "Date": "31.08.2016 17:35:05", 
    "Name": "asdfasdf", 
    "Attachments": "0" 
    }, 
    { 
    "Uid": "7777", 
    "MessageID": "<[email protected]>", 
    "Mailbox": "INBOX", 
    "Subject": "xxxs", 
    "Seen": true, 
    "Date": "31.08.2016 17:47:24", 
    "Name": "xxxssw", 
    "Attachments": "0" 
    } 
] 

我试过这样的东西,但我找不到任何更新的功能:[!伪码!]

JToken storage = JToken.Parse(System.IO.File.ReadAllText("tmp\\mail\\index.txt")); 

storage = storage.FirstOrDefault(o => (string)o["seen"] == "false").Update("seen", "true"); // Update(Field, NewValue) 

storage.WriteToFile(...) 
+0

也许你可以deserialise的JSON变成某种对象列表,它实现IQueriable。 然后,您可以使用LINQ和重新列入JSON的reserialise来剔除列表或结果。 – AntDC

+0

查看http://www.newtonsoft.com/json/help/html/ModifyJson.htm – dbc

回答

1
JArray array = JArray.Parse(yourJson); 
JObject jo = (JObject)array.FirstOrDefault(token => !(bool)token["Seen"]); 
// you could make an extension method for the remove/add sequence 
jo.Property("Seen").Remove(); 
jo.Property("Subject").AddAfterSelf(new JProperty("Seen", true)); 
// write back to file array.ToString()