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