外部から与えられた xml 構造 (巨大) を使用する必要があります。Visual Studio の xsd ツールを使用して、xmlserializer を使用して (逆) シリアル化する必要があるクラスを生成します。VS2010 から VS2012 に切り替えたので (ただし、.NET 4.0 をターゲットにしている)、XML の逆シリアル化に問題があります。私はそれを次のコードに分解しました:
using System.IO;
using System.Xml;
using System.Xml.Serialization;
using Microsoft.VisualStudio.TestTools.UnitTesting;
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]
[System.SerializableAttribute]
[System.Diagnostics.DebuggerStepThroughAttribute]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[XmlRootAttribute("DecoderParameter", Namespace = "", IsNullable = false)]
public class DecoderParameterType
{
private string[] decoderUpdatePointsField;
/// <remarks/>
[XmlAttributeAttribute(DataType = "integer")]
public string[] DecoderUpdatePoints
{
get
{
return this.decoderUpdatePointsField;
}
set
{
this.decoderUpdatePointsField = value;
}
}
}
[TestClass]
public class UnitTest1
{
#region Public Methods and Operators
[TestMethod]
public void TestMethod1()
{
var fileName = "c:\\temp\\test.xml";
var deserializer = new XmlSerializer(typeof(DecoderParameterType));
var output = new DecoderParameterType { DecoderUpdatePoints = new[] { "5", "7", "9" } };
using (var fs = new FileStream(fileName, FileMode.Create))
{
deserializer.Serialize(fs, output);
}
using (var sr = new XmlTextReader(fileName))
{
var myParameter = (DecoderParameterType)deserializer.Deserialize(sr);
}
}
#endregion
}
このコード スニペットは例外で失敗します。
System.Xml.XmlException: 'None' は無効な XmlNodeType です。
XmlAttributeAttribute から「DataType = integer」を削除すると機能します。
今、私は次の質問があります:
- .NET4.5 をインストールすると、.NET4.0 プログラムの動作が変わるのはなぜですか? それとも、そうではなく、何かが足りないのでしょうか? (VS2012 をインストールする前は、これは正常に機能していました。現在は VS2010 でも VS2012 でも機能していません)
- データ型宣言を削除すると、どのような副作用がありますか?
- 他に影響を受けるデータ型宣言はどれですか? 生成されたコードには、整数 (nonNegativeInteger、日付など) だけでなく、これらの宣言がたくさんあります。
更新: この問題は、変数が配列の場合にのみ発生します。
敬具