首页 > 解决方案 > 有没有办法抑制 YamlScalarNode 输出中的单引号?

问题描述

考虑这个简单的程序:

using System;
using YamlDotNet.RepresentationModel;

namespace TestYamlNode
{
    class Program
    {
        static void Main(string[] args)
        {
            var scalarNode = new YamlScalarNode("!yada");
            scalarNode.Style = YamlDotNet.Core.ScalarStyle.Plain;
            var serializer = new YamlDotNet.Serialization.Serializer();
            serializer.Serialize(Console.Out, scalarNode);

            scalarNode = new YamlScalarNode("yada");
            scalarNode.Style = YamlDotNet.Core.ScalarStyle.Plain;
            serializer.Serialize(Console.Out, scalarNode);
        }
    }
}

该程序的输出为:

'!亚达'

雅达

有没有办法告诉 YamlDotNet 在输出中包含 !、{ 等字符时不要在输出中包含单引号?在某些情况下,我正在处理一个 AWS SAM 模板,该模板具有如下所示的属性:

uri: !Sub arn:${AWS::Partition}:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${PetStorePetFunc.Arn}/invocations

标签: yamldotnet

解决方案


好的 - 所以在玩了一会儿之后,我意识到我问了一个愚蠢的问题。在我的用例中,我尝试使用以下形式生成输出:

uri: !Sub arn:${AWS::Partition}:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${PetStorePetFunc.Arn}/invocations

看起来正确的方法是使用 YamlScalarNode 上的 Tag 属性:示例:

var node = new YamlScalarNode("arn:${AWS::Partition}:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${PetStorePetFunc.Arn}/invocations");
node.Tag = "!Sub";

推荐阅读