Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 更新存储在文件中的JSON_C#_Windows Phone 7_Serialization_Json.net - Fatal编程技术网

C# 更新存储在文件中的JSON

C# 更新存储在文件中的JSON,c#,windows-phone-7,serialization,json.net,C#,Windows Phone 7,Serialization,Json.net,我在一个文件中存储了一些JSON,如下所示。我要做的是找到Task2,将其状态从complete更改为deleted,然后将其保存回我从中获取它的文本文件。但就我个人而言,我无法理解这一点 这是我的JSON: { "tasks": [ { "task" : "Task1", "quantity" : "(1)", "state" : "incomplete", "

我在一个文件中存储了一些JSON,如下所示。我要做的是找到
Task2
,将其状态从
complete
更改为
deleted
,然后将其保存回我从中获取它的文本文件。但就我个人而言,我无法理解这一点

这是我的JSON:

{
    "tasks": [
        {
            "task"     : "Task1",
            "quantity" : "(1)",
            "state"    : "incomplete",
            "changed"  : "never"    
        },
        {
            "task"     : "Task2",
            "quantity" : "(1)",                             
            "state"    : "complete",
            "changed"  : "never"                    
        },
        {
            "task"     : "Task3",
            "quantity" : "(1)",             
            "state"    : "deleted",
            "changed"  : "never"                    
        }
    ]
}
以下是我到目前为止的代码(使用Json.Net)

更新JSON需要什么代码?

您可以使用JSON.Net(http://json.codeplex.com/releases/view/89222) 并将其引用添加到您的项目中,然后您可以执行以下操作

 [DataContract]
        public class TaskClass
        {
            [DataMember(Name="task")]
            public string task { get; set; }

            [DataMember(Name="quantity")]
            public string quantity { get; set; }

            [DataMember(Name="state")]
            public string state { get; set; }

            [DataMember(Name = "changed")]
            public string changed { get; set; }
        }

        [DataContract]
        public class Tasks
        {
            [DataMember(Name = "tasks")]
            public IEnumerable<TaskClass> tasks { get; set; }
        }

//and you can deserialize json :

    string json = "{\"tasks\":[{\"task\": \"Task1\",\"quantity\": \"(1)\",\"state\": \"incomplete\",\"changed\": \"never\"},{\"task\": \"Task2\",\"quantity\": \"(1)\",\"state\": \"complete\",\"changed\": \"never\"},{\"task\":\"Task3\",\"quantity\": \"(1)\",\"state\": \"deleted\",\"changed\": \"never\" }]}";

            Tasks allTasks = new Tasks();
            allTasks = JsonConvert.DeserializeObject<Tasks>(json);

            foreach (TaskClass task in allTasks.tasks)
            {
                if (task.task.ToLower() == "task2")
                {
                    task.state = "deleted";
                }
            }

//and serialize it again as :

string value = JsonConvert.SerializeObject(objTasks);
[DataContract]
公共类任务类
{
[DataMember(Name=“task”)]
公共字符串任务{get;set;}
[数据成员(Name=“数量”)]
公共字符串数量{get;set;}
[数据成员(Name=“state”)]
公共字符串状态{get;set;}
[DataMember(Name=“changed”)]
公共字符串已更改{get;set;}
}
[数据合同]
公开课任务
{
[DataMember(Name=“tasks”)]
公共IEnumerable任务{get;set;}
}
//您可以反序列化json:
字符串json=“{\'tasks\”:[{\'task\”:\'Task1\”,\'quantity\':\“(1)\”,“state\”:“complete\”,\'changed\”:“never\”,{\'task\”:“Task2\”,“quantity\”:“(1)\,“state\”:“complete\”,“changed\”:“never\”,“,“{'task\”:“never\”,“Task3\”,“quantity\”:“(1),“state\”,“state\”:“never\”,“never\”;
Tasks allTasks=新任务();
allTasks=JsonConvert.DeserializeObject(json);
foreach(allTasks.tasks中的TaskClass任务)
{
if(task.task.ToLower()=“task2”)
{
task.state=“已删除”;
}
}
//并将其再次序列化为:
字符串值=JsonConvert.SerializeObject(objTasks);

您可以很容易地完成您想要的事情,如下所示:

// Read the JSON file 
string json = File.ReadAllText(fileName);

// Parse the JSON
JObject jObject = JObject.Parse(json);
JArray tasks = (JArray)jObject["tasks"];

// Find the first JObject in tasks having a "task" property with a value of "Task2"
// If such an object exists, set its "state" property to "deleted"
JObject task2 = (JObject)tasks.FirstOrDefault(a => a["task"].ToString() == "Task2");
if (task2 != null)
{
    task2["state"] = "deleted";
}

// Write the JSON back to the file
File.WriteAllText(fileName, jObject.ToString());
请注意,您需要使用System.Linq包含
位于代码顶部,以便能够访问
FirstOrDefault()
方法

// Read the JSON file 
string json = File.ReadAllText(fileName);

// Parse the JSON
JObject jObject = JObject.Parse(json);
JArray tasks = (JArray)jObject["tasks"];

// Find the first JObject in tasks having a "task" property with a value of "Task2"
// If such an object exists, set its "state" property to "deleted"
JObject task2 = (JObject)tasks.FirstOrDefault(a => a["task"].ToString() == "Task2");
if (task2 != null)
{
    task2["state"] = "deleted";
}

// Write the JSON back to the file
File.WriteAllText(fileName, jObject.ToString());