C# XmlArray在反序列化XML文件时总是初始化集合
在没有初始化集合值和条件的情况下,我似乎无法反序列化类。我希望在不初始化集合的情况下反序列化XML文件。下面是我的班级:C# XmlArray在反序列化XML文件时总是初始化集合,c#,xml,serialization,C#,Xml,Serialization,在没有初始化集合值和条件的情况下,我似乎无法反序列化类。我希望在不初始化集合的情况下反序列化XML文件。下面是我的班级: [Serializable] [XmlRoot(ElementName = "Swag")] public class SwagCollection : SerializableObservalbleCollection<SwagItem> { } [Serializable] public class SwagItem : INotifyPropertyCha
[Serializable]
[XmlRoot(ElementName = "Swag")]
public class SwagCollection : SerializableObservalbleCollection<SwagItem>
{
}
[Serializable]
public class SwagItem : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private string name;
private ObservableCollection<string> values = null;
private ObservableCollection<Condition> conditions = null;
public SwagItem()
{
values = null;
conditions = null;
}
[XmlAttribute]
public string Name
{
get
{
return this.name;
}
set
{
this.name = value;
OnPropertyChanged("Name");
}
}
[XmlArray("Values"), XmlArrayItem("ValueItem")]
public ObservableCollection<string> Values
{
get
{
return values;
}
set
{
values = value;
OnPropertyChanged("Values");
}
}
[XmlArray]
public ObservableCollection<Condition> Conditions
{
get
{
return conditions;
}
set
{
conditions = value;
OnPropertyChanged("Conditions");
}
}
}
我已将其保存为程序集中的嵌入式资源:
<Swag xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SwagItem Name="Bob"/>
</Swag >
我使用以下方法从资源中检索XML没有问题:
private static T DeserializeFromResource<T>(string filename)
{
string result;
using (Stream stream = typeof (MyTestAssembly).Assembly.
GetManifestResourceStream("MyTestAssembly.Resources." + filename))
{
using (StreamReader sr = new StreamReader(stream))
{
result = sr.ReadToEnd();
}
}
XmlSerializer serializer = new XmlSerializer(typeof (T));
TextReader textReader = new StringReader(result);
return (T) serializer.Deserialize(textReader);
}
我在反序列化TextReader的最后一行前面放了一个断点,XML结构仍然只有一行,并且没有在XML中声明空集合
但是,当调用反序列化方法时,我的类中的集合将被初始化!尽管在字段和构造函数中设置为null。不幸的是,当我去保存XML文件时,剩下的是空集合:
<Swag xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SwagItem Name="Bob">
<Values />
<Conditions />
</SwagItem >
</Swag >
如果值和条件集合为空,我似乎无法让它们不显示在XML中,尽管将它们的字段设置为null。不知道如何防止集合被分配,但可以通过提供一个方法来防止空集合被序列化,例如`bool ShouldSerializeValues'{返回值!=null&&values.Count>0;}很好,谢谢。