c# - 寻找最佳实践 - C# - 将文件读取到对象,编辑并保存回 - 不是 XML,Json
问题描述
首先,我只在 google 和这里找到了 .json to object 或 .xml to object 的示例。但我有一个预定义的代码,我想读入、编辑和准确保存或只更改内容。
对于上下文,它是关于皮肤模型的,即图像的路径和更改它们的属性
文件
Unit
{
economy : _.abcd.1234 {
player : _.defg.5678
vehicles: 10
vehicle[0] : _.hijk.9012
vehicle[1] :
... and so on
vehicle[9] : _.lmno.3456
assigned_vehicle: _.hijk.9012
...
}
... other things
vehicle : _.hijk.9012 {
license_plate: "M XX 69"
accessories: 41
accessories[0]: _.af25.1780
...
accessories[40]: _.6e68.a620
data_path: "/def/vehicle/mercedes/data.txt"
}
... other vehicles
... other accessories
accessory : _.af25.1780 {
offset: 4
paint_color: (1, 1, 1)
wear: 0
data_path: "/def/vehicle/t_wheel/single_385_55_steel.sii"
}
... other accessories
... more things with format
object : name {
property : value
property : object
property : count
property[x] : value
}
}
实际上我只需要assigned_vehicle的值,然后将部分作为一个对象,编辑然后只写回部分。当然,最好将所有内容都读入并再次完全保存。所以基本上我自己的这种格式的序列化器和反序列化器。
所以你是什么意思?逐行读取文件并手动创建和填充对象, 还是有比创建无数对象并手动填充它们更好的解决方案?
解决方案
可以这样工作吗?
我不知道解析器/序列化器/反序列化器应该是什么样子。或者甚至不是我的课
public static void ParseLocalSaveGame(SaveGame saveGame)
{
using (StreamReader sr = new StreamReader(saveGame.Path))
{
string line;
while ((line = sr.ReadLine()) != null)
{
if (line.Contains("Unit"))
{
// beginning of file
// jump to the first "usable" line
sr.ReadLine();
sr.ReadLine();
continue;
}
if (line.Contains(""))
{
// skip empty line
sr.ReadLine();
continue;
}
else if (line.Contains("economy"))
{
saveGame.Economy = new Economy(line.Replace("economy :", "").Replace(" ", "").Replace("{", ""));
ParseSaveGameEconomy(sr);
continue;
}
else if (line.Contains("vehicle"))
{
Vehicle vehicle = new Vehicle(line.Replace("vehicle :", "").Replace(" ", "").Replace("{", ""));
ParseSaveGameVehicle(sr, vehicle);
saveGame.Vehicles.Add(vehicle);
continue;
}
else if (line.Contains("accessory"))
{
Accessory accessory = new Accessory(line.Replace("accessory :", "").Replace(" ", "").Replace("{", ""));
ParseSaveGameAccessory(sr, accessory);
saveGame.Accessories.Add(accessory);
continue;
}
else if (line.Contains("}"))
{
//This should be the last line
continue;
}
else
{
// This should not happen!
// TODO: Write Error
}
}
}
}
推荐阅读
- python - 如何在 matplotlib 中指定重复标签的使用?
- python - 通过 classmethod 获取模型定义的列对象
- flutter - 错误:颤动中没有名称为“IndexedWidgetBuilder”的命名参数
- azure - Azure 权限注册到 SQL 数据库连接失败
- python - Pytesseract 转换为错误的字符串
- intersystems-iris - 父子持久对象的清除策略
- java - 文件编码不稳定
- python - 如何从服务器上的所有内容中删除一个角色?
- database - 如何使用 API 从 opencellid 下载差异数据?
- java - JTable TableColumn - 拖动列时modelIndex的属性没有变化