假设我有这个样本类:
public class MyClass
{
public List<int> ListTest { get; set; }
public string StringTest { get; set; }
public int IntTest { get; set; }
}
这段代码:
string xmlStr = "<MyClass><StringTest>String</StringTest></MyClass>";
XElement xml = XElement.Parse(xmlStr);
XmlSerializer ser = new XmlSerializer(typeof(MyClass));
using (XmlReader reader = xml.CreateReader())
{
var res = ser.Deserialize(reader);
}
完成反序列化后,res
的值为:
ListTest
- &gt; Count = 0的空列表(非空)
StringTest
- &gt;如预期的“字符串”
IntTest
- &gt;期望0(整数的默认值)。
我希望序列化程序与List的行为相同(default(List<T>)
为空),而不是实例化它们。
我怎样才能完成这样的事情呢?
顺便说一句,我必须使用XmlSerializer
。
答案 0 :(得分:7)
您可以使用backup-property将属性序列化/反序列化为数组:
public class MyClass
{
[XmlIgnore]
public List<int> ListTest { get; set; }
[XmlElement("ListTest")]
public int[] _listTest
{
get { return ListTest?.ToArray(); }
set { ListTest = value == null ? null : new List<int>(value); }
}
...
}
答案 1 :(得分:0)
将您的财产标记为可以为空:
public class MyClass
{
[XmlArray(IsNullable = true)]
public List<int> ListTest { get; set; }
public string StringTest { get; set; }
public int IntTest { get; set; }
}