C#将项添加到JSON对象

时间:2017-08-14 14:06:40

标签: c# json

我有这个对象,我想再添加一天。

[{
    "stone":"5kg",
    "years":
    [{
        "year":"2017",
        "stone":"5kg",
        "months":
        [{
            "month":"august",
            "stone":"0.5kg",
            "days":
            [{
                "day":"14",
                "stone":"0.1kg"
            }]
        }],
        "weeks":
        [{
            "week":"01",
            "stone":"0.5kg"
        }]
    }]
}]

我将它存储在一个文件中,我将其反序列化:

string file = System.IO.File.ReadAllText(@"C:\Users\luuk\desktop\test1.json");
var _data = JsonConvert.DeserializeObject<List<Data>>(file);

现在我想为它添加一天,但我无法弄明白。 我试过这样的事情:

_data.Add(new Data()
{

});

string json = JsonConvert.SerializeObject(_data);
System.IO.File.WriteAllText(@"C:\Users\luuk\desktop\test1.json", json);

但我只能在那里访问[]和石头。

这些是我的课程:

public class Data
{
    public string stone { get; set; }
    public List<Years> years { get; set; }
}

public class Years
{
    public string year { get; set; }
    public string stone { get; set; }
    public List<Months> months { get; set; }
    public List<Weeks> weeks { get; set; }
}

public class Months
{
    public string month { get; set; }
    public string stone { get; set; }
    public List<Days> days { get; set; }
}

public class Days
{
    public string day { get; set; }
    public string stone { get; set; }
}

public class Weeks
{
    public string week { get; set; }
    public string stone { get; set; }
}

那么如何在对象中添加其他日期呢?

(我已经将我的代码中的所有变量都从荷兰语翻译成了英语,所以我有一些我忘记的或者一些错字#)

2 个答案:

答案 0 :(得分:4)

您需要先将年份和月份放在您想要添加另一天的位置。以下是如何做到这一点:

// Update the data in one line 
_data[0].years.First(x=> x.year == "2017") // Get the year "2017"
        .months.First(x=> x.month == "august") // Get the month "august"
        .days.Add(new Days { day = "15", stone = "0.5kg" }); // Add a new day
  

OR

// Get the year 
Years year = _data.years.First(x=> x.year == "2017");

// Get the month
Months month = year.months.First(x=> x.month == "august");

// Add the day in the month
month.days.Add(new Days { day = "15", stone = "0.5kg" });

答案 1 :(得分:1)

你正在使用数组。您无法向已初始化的数组添加内容,它们是固定大小的。

T[]的所有数组更改为List<T>,然后您可以在其上调用.Add()来添加项目。