xoofx / SharpYaml

SharpYaml is a .NET library for YAML compatible with CoreCLR
Other
334 stars 61 forks source link

Yaml creation error #73

Closed liuyl1992 closed 4 years ago

liuyl1992 commented 4 years ago

image result: image

ghost commented 4 years ago

I have a similar issue. No clue how to resolve it, and it's seriously bothering me during development on my own project.

ghost commented 4 years ago

I've tracked this down to AnchorSerializer.cs. Disabling anchoring and aliases would resolve this issue, yet I cannot find any documentation on how to do this.

ghost commented 4 years ago

YamlSharp.Serializer.Settings.EmitAlias is set to 'true' by default. I thought setting it to 'false' would disable this behavior, but rather, it increased it. Now, every variable was given an anchor tag, due to the fact that aliases (but no anchors) were now disabled. @xoofx, is there really no way to outright disable outputting anchors when Serializer.Serialize(object) is called?

ghost commented 4 years ago

Issue #15 ("How do I get Serialize() to stop putting out anchor and reference labels?") was about this same thing, actually, and the response of setting 'SortKeyForMapping' and 'EmitAlias' both to false before serializing simply does not resolve this (at least not anymore). For now, switching to JSON over YAML seems like a good option due to readability concerns.

xoofx commented 4 years ago

You have to use SerializerSettings and disable aliasing.

using System;
using SharpYaml.Serialization;

namespace SharpYaml.Tests
{
    internal class Program
    {
        public static void Main(string[] args)
        {
            var settings = new SerializerSettings {EmitAlias = false};
            var serializer = new Serializer(settings);
            var tester = new Tester() { A = "this is a", B = "this is a"};
            var text = serializer.Serialize(tester);
            Console.WriteLine(text);
        }

        public struct Tester
        {
            public string A { get; set; }

            public string B { get; set; }
        }
    }
}