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

时间:2020-01-15 15:22:50

标签: c# xmlserializer roslyn-code-analysis

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

1 个答案:

答案 0 :(得分: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; }
}
相关问题