如何修改JSON列表中的JSON对象?

时间:2017-03-26 15:40:35

标签: c# json

我的JSON列表如下所示(其中Type 3是CommandType.Welcome):

[
  {
    "Keyword": "Hello",
    "Type": 0,
    "Message": "World"
  },
  {
    "Keyword": "Hi",
    "Type": 0,
    "Message": "There"
  },
  {
    "Keyword": "Test",
    "Type": 0,
    "Message": "test"
  },
  {
    "Keyword": "Greeting",
    "Type": 3,
    "Message": "Welcome"
  }
]

我当前的方法将从列表中提取正确的对象并修改对象,但它不会修改列表对象。例如,command.message = message但是当我序列化列表时,它并没有合并更改。

    public void SetGreetMessage(string message)
    {
        var leaveGreet = new LeaveGreetService();
        foreach (var command in leaveGreet.CommandList.Where(x => x.Type == CommandType.Welcome))
        {
            command.Message = message;
            dynamic jsonData = JsonConvert.SerializeObject(CommandList, Formatting.Indented);

            File.WriteAllText("Commands.txt", jsonData);
        }
    }

我已经在线查看了一些资源,并且大多数解析为字符串并使用字符串对其进行修改。但我想知道是否有可能以某种方式这样做。我知道我可以使用这种方法为它添加一个新对象,但修改似乎是一个伟大的壮举。

编辑:

using System;

namespace vVvBot.Model
{
    public class CustomCommand
    {
        public string Keyword { get; set; }
        public CommandType Type { get; set; }
        public string Message { get; set; }
    }

    public enum CommandType
    {
        Message,
        Faq,
        Action,
        Welcome,
        Leaving
    }
}

CommandList是文件

中命令Object的列表

1 个答案:

答案 0 :(得分:0)

我认为您错误地传递了命令参数,并且没有生成json。我已将serializeObject参数从CommandList更改为command

public void SetGreetMessage(string message)
    {
        var leaveGreet = new LeaveGreetService();
        foreach (var command in leaveGreet.CommandList.Where(x => x.Type == CommandType.Welcome))
        {
            command.Message = message;
            dynamic jsonData = JsonConvert.SerializeObject(command, Formatting.Indented);

            File.WriteAllText("Commands.txt", jsonData);
        }
    }