1

外部から与えられた 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、日付など) だけでなく、これらの宣言がたくさんあります。

更新: この問題は、変数が配列の場合にのみ発生します。

敬具

4

1 に答える 1

0

最初の箇条書きは簡単です。

  • .NET4.5 をインストールすると、.NET4.0 プログラムの動作が変わるのはなぜですか?

.NET 4.5 は、サイド バイ サイド インストールではなく、オーバー ザ トップ インストールであるためです。.NET 4.5 をインストールすると、4.0 アセンブリが変更されます。4.0 と 4.5 をターゲットにするという行為は、IDE が 4.5固有の機能を参照できるかどうかを決定するだけです。4.0 を対象としている場合でも、4.5 をインストールすると、4.5 に関連するコード変更 (バグ修正、動作の変更、および新しいバグ) を含む 4.5 実装を使用することになります。

于 2013-05-02T14:40:18.113 に答える