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