c# - 如何将数据写入yaml文件

标签 c# asp.net

我正在尝试构建一个简单的 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 的每个键的值?

最佳答案

您可以执行以下操作:

  • 首次安装 YamlDotNet
    (如果您使用 .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/

    相关文章:

    c# - 子类 HashSet 以便它在另一个集合中使用时始终使用某个 IEqualityComparer

    c# - 为 SQLCommand 提供新的 SQLConnection 是否会在新的 SQL 连接上调用 Dispose?

    c# - 如何以编程方式测试 SQL Server 是否支持 'AT TIME ZONE' ?

    c# - 父任务不等待子任务

    asp.net - 如何使用 jQuery 在 iF​​rame 中仅显示一个 div?

    c# - 始终记录 Entity Framework 核心 2 SQL

    c# - IIS 回收时运行的任务会发生什么

    c# - 一个表可以通过等号复制到另一个表吗?如果没有,那又如何呢?

    asp.net - 在本地主机上应用 SSL

    javascript - 查找父浏览器或同级浏览器窗口