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; }
}
我有一些 类 具有 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; }
}