4

asp.netUserControl用にViewStateに保存したいこのようなクラスがあります。基本的に、いくつかのメソッドを使用して汎用リストを拡張しますが、いくつかのプロパティも追加します。

public class MyListClass: List<MyObject>
{
    public string ExtraData;
 // some public methods
}

MyObjectはシリアル化可能で、メソッドは次のように実装されています。

[Serializable()]
class MyObject 
{
    public MyObject(SerializationInfo info, StreamingContext ctxt)
    {
        Prop1 = (string)info.GetValue("Prop1", typeof(string));
        //...
    }
    public void GetObjectData(SerializationInfo info, StreamingContext ctxt)
    {
        info.AddValue("Prop1",Prop1);
    }
}

また、汎用リストは本質的にシリアル化可能です。ViewStateは正常に動作しますList<MyObject>が、MyListClassのシリアル化を実装する方法がわからないようです。

直感的に私がやりたいのは次のようなものです。

public MyListClass(SerializationInfo info, StreamingContext ctxt)
{
    ExtraData= (string)info.GetValue("ExtraData", typeof(string));
    this = (List<MyClass>)info.GetValues("BaseList",typeof(List<MyClass>));
}

明らかにそれはうまくいきません。これを行う正しい方法は何ですか?

4

2 に答える 2

3

MyListClassにSerializableタグを配置できるはずです。これにより、ExtraDataが独自のフィールドとしてシリアル化されます。

于 2010-12-21T22:17:56.527 に答える
0

最近のASP.NETがViewStateを処理する方法であるPageStatePersisterクラスのドキュメントを参照してください。特に、IStateFormatterインターフェイスのデフォルトの実装であるObjectStateFormatterクラスを参照してください。

そのドキュメントから、 BinaryFormatterを使用してシリアル化できるすべてのクラスが機能するはずです。

于 2010-12-22T01:15:49.927 に答える