XmlSerializer 和数组属性 C# - Roslyn 抱怨

XmlSerializer and array properties C# - Roslyn complains

我有一些 类 具有 public 数组属性,这些属性被很好地序列化和反序列化。代码分析器抱怨说您不应该将数组作为 public 属性。因此,我将(按照 CA 的建议)我的属性更改为方法,这些方法现在设置并获取我的私有数组字段。 问题:XmlSerializer 当然不再序列化它们。在没有代码分析器抱怨的情况下序列化数组的最佳做法是什么? 我也尝试过将我的属性更改为列表(CA 建议的第二个解决方案),但是 CA 希望它们没有 setter,这再次导致没有序列化!

最后,如果您的情况需要,您可以否决 CA 指南;那绝对没问题。然而! get-only 列表应该没问题;一个典型的场景是:

public List<Bar> Bars { get; } = new List<Bar>();

(可选地带有一些 [XmlElement][XmlArray][XmlArrayItem] 等属性)。

如果 工作;请 post 一个显示它不起作用的最小示例。

这是一个工作示例:

class Program
{
    static void Main()
    {
        var foo = new Foo {
            Bars = {
                    new Bar { X = 42 },
                    new Bar { X = 12 },
                    new Bar { X = 6 },
                }
        };

        var ser = new XmlSerializer(foo.GetType());
        var sw = new StringWriter();
        ser.Serialize(sw, foo);
        var xml = sw.ToString();
        Console.WriteLine(xml);
        var sr = new StringReader(xml);
        var clone = (Foo)ser.Deserialize(sr);
        foreach (var bar in clone.Bars)
            Console.WriteLine(bar.X);
    }
}

public class Foo
{
    public List<Bar> Bars { get; } = new List<Bar>();
}
public class Bar
{
    public int X { get; set; }
}