有用於連載Nullable
類型的SO,但我需要的是爲deserialising到可空類型的解決方案的各種解決方案。 Specified和ShouldSerailise技術似乎不適用於反序列化。Deserialise缺少XML屬性空類型
所以,如果我的XML文檔中缺少的屬性我想在類中的int爲空不爲0
不幸的是,你不能直接,因爲序列化拋出反射誤差序列化到一個可空int類型。
所以在下面的例子中,我想result2.SomeInt
爲空和result1.SomeInt = 12
class TestProgram
{
public static void Main(string[] args)
{
XmlSerializer deserializer = new XmlSerializer(typeof(Result));
Stream xmlStream = new MemoryStream(Encoding.ASCII.GetBytes(docWithVal().InnerXml));
var result1 = (Result)deserializer.Deserialize(xmlStream);
Stream xmlStream2 = new MemoryStream(Encoding.ASCII.GetBytes(docWithoutVal().InnerXml));
var result2 = (Result)deserializer.Deserialize(xmlStream2);
}
public static XmlDocument docWithoutVal()
{
var doc = new XmlDocument();
doc.LoadXml(@"<Result/>");
return doc;
}
public static XmlDocument docWithVal()
{
var doc = new XmlDocument();
doc.LoadXml(@"<Result SomeInt = ""12""/>");
return doc;
}
}
[Serializable]
public class Result
{
[XmlAttribute]
public int? SomeInt { get; set; }
}
即使您使用int屬性來代替int?第二個序列化將不起作用,因爲XML中缺少SomeInt屬性。 –
如果'SomeInt'的值爲0,你想要的值是否應該爲null? –
除非您使用自定義(de)序列化程序,否則我想您在嘗試將Nullable屬性序列化爲XmlAttribute時會遇到問題。它應該是XmlElement。 – jbl