Array multidimensionali e viewstate

di Marco Leoncini, in asp.net,

durante una discussione nel forum, mi era completamente passato di mente, il fatto che le matrici multidimensionali non sono serializzabili, o perlomeno non lo sono dalla classe LosFormatter, utilizzata da Asp.Net per salvare lo stato dei controlli nel ViewState.
può sembrare strano, visto che la classe è decorata con l'attributo [Serializable] e dispone di un TypeConverter.
ma scendiamo nel dettaglio, durante la serializzazione a lanciare un eccezione è LosFormatter di cui o estrapolato un parte di codice

 
.....

  else if (type1.IsArray)

  {

  Type type3 = type1.GetElementType();

  output.Write('@');

  if (type3 != type2)

  {

  int num3 = this.GetTypeId(type3);

  this.WriteTypeId(output, num3, type3);

  output.Write('<');

  Array array1 = (Array) value;

  for (int num4 = 0; num4 < array1.Length; num4++)

  {

  this.SerializeValue(output, array1.<strong>GetValue</strong>(num4));

  output.Write(';');

  }

  }

  ......... 



LosFormatter controlla il tipo che sta serializzando, nel caso di un array, viene chiamto il metodo GetValue, è lui in fine a lanciare l'eccezione:

public object GetValue(int index)

  {

  if (this.Rank != 1)

  {

  throw new <strong>ArgumentException(Environment.GetResourceString("Arg_Need1DArray"));</strong>

  }

  return this.InternalGetValue(index, 0, 0);

  }

  



ecco risvelato l'arcano :)

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Nella stessa categoria
I più letti del mese