public class Warning
{
public Warning()
{
}
public Warning(String name, List<String> conflictList)
{
Name = name;
ConflictList = conflictList;
}
public string Name
{
get;
set;
}
public List<String> ConflictList
{
get;
set;
}
public static Warning ReadXML(string xml)
{
Warning warning = null;
try
{
XmlSerializer serializer = new XmlSerializer(typeof(Warning));
using (StringReader sr = new StringReader(xml))
{
XmlTextReader xtr = new XmlTextReader(sr);
warning = (Warning)serializer.Deserialize(xtr);
xtr.Close();
sr.Close();
}
}
catch
{
}
return warning;
}
public void Save(string filename)
{
XmlSerializer serializer = new XmlSerializer(typeof(Warning));
using (StreamWriter writer = new StreamWriter(filename))
{
serializer.Serialize(writer, this);
writer.Close();
}
}
}
次のXML文字列をデシリアライズすると、NameとConflictListの両方でNULL以外の値が返されます。これはうまく、私は期待しています。xml文字列をオブジェクトにデシリアライズし、欠落しているリスト要素の空のリストを取得します。なぜnullを返さないのですか?
Warning w1 = Warning.ReadXML(
"<Warning><Name>test warning</Name><ConflictList><string>file1.txt</string></ConflictList></Warning>");
w1.Nameは、 "テストの警告" を返し、w1.ConflictListは、私は、次のXML文字列をデシリアライズ場合、w2.Nameはnullを返します。ただし、テキスト "FILE1.TXT"
を含むリストを返し、私は理解していますが、ConflictListは実際に0のカウントを持つリストです。私はそれもnullであると予想しました。どうして?
Warning w2 = Warning.ReadXML("<Warning></Warning>");
要素がxml文字列に存在しない場合、w1.ConflictListはnullを返すことがありますが、いつ発生しますか?