免责声明:C#并不是我的强项,伙计们;我通常是个数据库专家.其中很多都是我在这里和那里找到的代码拼凑而成的;所以请对我宽容一些.
我正在try 弄清楚如何向用户打开的现有JSON文档添加新对象,然后保存对该文件的更新.下面是一个编成的JSON,遵循相同的基本 struct ,我希望能够添加一个新的"汽车"到"人"."新"值通过文本框和下拉列表出现.
{
"Name": "Bob Bob",
"City": "Louisville",
"State": "Kentucky",
"Address": "123 City Ln",
"Cars": [
{
"Make": "Ford",
"Model": "Explorer",
"Color": "White"
},
{
"Make": "Dodge",
"Model": "Caravan",
"Color": "White"
},
{
"Make": "Bat",
"Model": "Mobile",
"Color": "Black:"
}
],
"Jobs": [
{
"Employer": "Walmart",
"Position": "Greeter",
"Pay": "$35,000",
"EndDate": "12/25/1999"
},
{
"Employer": "Target",
"Position": "Cashier",
"Pay": "$32,000",
"EndDate": "1/1/2002"
},
{
"Employer": "SkyNet",
"Position": "Programmer",
"Pay": "$86,000",
"EndDate": "5/8/2023"
}
]
}
我已经设置了以下班级
public class Person
{
public string Name { get; set;}
public string City { get; set;}
public string State { get; set;}
public string Address { get; set;}
public Cars[] Cars {get; set;}
public Jobs[] Jobs {get; set;}
}
public class Cars
{
public string Make { get; set;}
public string Model { get; set;}
public string Color { get; set;}
}
public class Jobs
{
public string Employer { get; set;}
public string Position { get; set;}
public string Pay { get; set;}
public string EndDate { get; set;}
}
以下是我到目前为止拥有的代码
private void btnSaveUpdates_Click(object sender, EventArgs e)
{
string Make = cbMake.Text;
string Model = txtModel.Text;
string Color = cbColor.Text;
string filePath = txtFileLoc.Text;
DoJSONWork(filePath, Make, Model, Color);
}
public static void DoJSONWork(string filePath, string Make, string Model, string Color)
{
var FileStream = File.OpenRead(filePath);
using (StreamReader reader = new StreamReader(FileStream))
{
using (JsonTextReader JSONreader = new JsonTextReader(reader))
{
JSONreader.SupportMultipleContent = true;
var serializer = new JsonSerializer();
while (JSONreader.Read())
{
if (JSONreader.TokenType == JsonToken.StartObject)
{
Person p = serializer.Deserialize<Person>(JSONreader);
Cars cars = p.Cars.FirstOrDefault(c => c.Make + c.Model + c.Color == Make + Model + Color);
if (cars == null)
{
cars = new Cars
{
Make = Make,
Model = Model,
Color = Color
};
p.Cars = p.Cars.Concat(new Cars[]
{
cars
}).ToArray();
}
}
}
}
}
//I honestly don't know what to do next
}
我正在努力想办法更新JSON文档中的"汽车".我需要反序列化和序列化整个JSON文档吗?