1

なぜ空のコンストラクタなしでclassはできないのだろうか。serialization

このエラーメッセージが表示されたときに、何度か試しました。

ClassName cannot be serialized because it does not have a parameterless constructor.

コードは次のようになります。

   public void DoSerialize(string path)
    {
        try
        {
            XmlSerializer serializer = new XmlSerializer(typeof(List<MyClass>));
            TextWriter textWriter = new StreamWriter(path);
            serializer.Serialize(textWriter, MyList);
            textWriter.Close();
        }
        catch (Exception e)
        {

        }
    }

本当に、空のコンストラクターを追加すると、それは機能しました

4

1 に答える 1

5

逆シリアルXmlSerializer化では、クラスのオブジェクトを作成し、XML からその属性を 1 つずつ設定する必要があります。そのために、シリアライザーはオブジェクトを構築する必要があり、そのためにデフォルトのパラメーターなしのコンストラクターを使用します。他のコンストラクターに渡す必要がある属性がわからないため、他のコンストラクターを使用できません。

パラメーターなしのコンストラクターがないオブジェクトのインスタンスを作成できないことが問題として認識されており、初期化されていないオブジェクトを .NET で作成するバックドアの方法を提供することで、.NET の新しいバージョンで修正されましたFormatterServices.GetUninitializedObject。ただし、XMLSerializer現状のまま放置されています。

于 2013-03-10T13:03:42.840 に答える