我正在尝试构建一个简单的 windows 窗体,该窗体应该将值写入 yaml 配置文件。发布后,exe 文件保存在 中。配置目录。
private void buttonSaveSettings_Click(object sender, EventArgs e)
{
string hostname = hostnameBox.Text;
var path = "C:\\Users\\Nick\\Desktop\\packages\\doctrine.yaml";
var deserializer = new YamlDotNet.Serialization.Deserializer();
try
{
using (var reader = new StreamReader(path))
{
var obj = deserializer.Deserialize<Dictionary<object, object>>(reader);
var doctrine = (Dictionary<object, object>)obj["doctrine"];
var dbal = (Dictionary<object, object>)doctrine["dbal"];
var connections = (Dictionary<object, object>)dbal["connections"];
var dict = (Dictionary<object, object>)connections["default"];
// TODO: Modify the dictionary
// dict["dbname"] = "test";
dict["dbname"] = "test";
using (StreamWriter writer = new StreamWriter(path))
{
// Save Changes
var serializer = new YamlDotNet.Serialization.Serializer();
serializer.Serialize(writer, obj);
}
}
}
catch (Exception exception)
{
dumpBox.Text = exception.Message;
}
}
那是学说配置文件(packages/doctrine.yaml)
doctrine:
dbal:
default_connection: default
connections:
default:
dbname: dbname
user: user
password: password
host: host
driver: pdo_mysql
server_version: '10.0.38-MariaDB'
# IMPORTANT: You MUST configure your server version,
# either here or in the DATABASE_URL env var (see .env file)
#server_version: '5.7'
orm:
auto_generate_proxy_classes: true
naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware
auto_mapping: true
mappings:
App:
is_bundle: false
type: annotation
dir: '%kernel.project_dir%/src/Entity'
prefix: 'App\Entity'
alias: App
我不确定该任务是否可以仅通过使用 System.IO 来处理,因为我们可能需要一些额外的解析器。
问题是,我怎样才能重写属于doctrine/dbal/connections/default 的每个键的值?
最佳答案
您可以执行以下操作:
(如果您使用 .NET Core
dotnet add package YamlDotNet --version 8.1.2
)或(如果您使用包管理器 PM> Install-Package YamlDotNet -Version 8.1.2
)根据您的需要调整代码
var path = "/path/to/file.yaml";
var deserializer = new YamlDotNet.Serialization.Deserializer();
try {
using (var reader = new StreamReader(path)) {
var obj = deserializer.Deserialize<Dictionary<object, object>>(reader);
var doctrine = (Dictionary<object, object>)obj["doctrine"];
var dbal = (Dictionary<object, object>)doctrine["dbal"];
var connections = (Dictionary<object, object>)dbal["connections"];
var dict = (Dictionary<object, object>)connections["default"];
// TODO: Modify the dictionary
// dict["dbname"] = "test";
using (var writer = new StreamWriter(path)) {
// Save Changes
var serializer = new YamlDotNet.Serialization.Serializer();
serializer.Serialize(writer, obj);
}
}
} catch (Exception e) {
// TODO: manage
}
关于c# - 如何将数据写入yaml文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62371078/