SOで型をシリアル化するためのさまざまなソリューションがありますが、必要なの はnull許容型に逆シリアル化するためのソリューションです。SpecifiedおよびShouldSerailiseの手法は、逆シリアル化には適用されないようです。Nullable
したがって、XMLドキュメントに属性がない場合は、クラスのintを0ではなくnullにします。
残念ながら、シリアル化はリフレクションエラーをスローするため、null許容整数に直接シリアル化することはできません。
したがって、以下の例では、result2.SomeInt
nullになりたいと思っています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; }
}