私はこのようなXML要素を持っている:値のない整数要素をシリアル化する方法は?
<framerate_denominator nil="true"/>
私のクラスのメンバーは次のように飾られている次のように
[XmlElement("framerate_denominator")]
public int? FramerateDenominator;
public bool ShouldSerializeFramerateDenominator() { return FramerateDenominator.HasValue; }
私のコードは次のとおりです。
using Serialization;
using System.IO;
using System.Xml.Serialization;
namespace SerializationSandbox
{
class Program
{
static void Main(string[] args)
{
// read
Job job = null;
string path = @"C:\sample_job.xml";
XmlSerializer xmlSerializer = new XmlSerializer(typeof(Job));
using (StreamReader reader = new StreamReader(path))
{
//EXCEPTION HERE
job = (Job)xmlSerializer.Deserialize(reader);
reader.Close();
}
// write
xmlSerializer = new XmlSerializer(job.GetType());
using (StringWriter textWriter = new StringWriter())
{
xmlSerializer.Serialize(textWriter, job);
var text = textWriter.ToString();
}
}
}
}
私はXMLを逆シリアル化すると次の例外が発生します。
FormatException:入力文字列の形式が正しくありません。
nil="true"
属性値を使用してこれらの要素をどのように処理できるかは完全にはわかりません。誰にもアドバイスはありますか?
事前のおかげで...
それはxmlには存在しませんが、私は[ここ](https://stackoverflow.com/a/2966688/4519059)のようにそれらのタグをスキップするように提案することができます。 –
'nil'がサポートされるためには、' xsi'名前空間に存在する必要があります。 [the docs](https://msdn.microsoft.com/en-us/library/ybce7f69(v = vs.100).aspx)を参照してください。記述したとおりの場合は、これを明示的に処理する必要があります。 –
@ shA.t私は現在、そこに提案のハックな実装をしています。 Linqを使ってXDocumentから空のノード値を取り出しています。このトリックをするように見えますが、私は以下のあなたの答えは、私が実装を終わらせるものだと思います。 – kevp