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

问题描述 投票:2回答:1

我有一些带有公共数组属性的类,这些类已经过序列化和反序列化了。代码分析器抱怨您不应该将数组作为公共属性。因此,按照CA的建议,我将属性更改为方法,现在可以设置并获取我的私有数组字段。问题:XmlSerializer当然不会再对其进行序列化了。在没有代码分析器抱怨的情况下使阵列序列化的最佳实践是什么?我还尝试过将属性更改为列表(CA提出的第二个建议解决方案),但是CA希望它们不使用setter,这又导致不进行序列化!

c# xmlserializer roslyn-code-analysis
1个回答
0
投票

最终,如果您的方案需要,您可以否决CA指南;绝对很好然而!仅获取列表应该很好;一个典型的场景是:

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

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

如果该工作;请发布一个最小的示例,以表明它不起作用。

这是一个有效的例子:

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; }
}
© www.soinside.com 2019 - 2024. All rights reserved.