2011-05-24 1 views
0

Est-ce que quelqu'un sait comment sérialiser un contrôle personnalisé en JSON dérivé d'un autre contrôle Web? Je continue d'obtenir l'erreur que la classe de base n'est pas sérialisable. Voici le code pour la classe dérivéeComment JSON sérialiser une classe dérivée de la classe Web Control

public class BaseWidget : CompositeControl 
{ 
    protected Label _lblHeader; 
    protected Button _editButton; 
    protected HtmlInputHidden _idField; 

    /// <summary> 
    /// The Unique identified that identifies this widget 
    /// </summary> 

    public int ControlID 
    { 
     get 
     { 
      EnsureChildControls(); 
      int i = -1; 
      int.TryParse(_idField.Value, out i); 
      return i; 
     } 
     set 
     { 
      EnsureChildControls(); 
      _idField.Value = value.ToString(); 
     } 
    } 

    /// <summary> 
    /// Allow the user to edit the widget 
    /// </summary> 
    public bool AllowEdit 
    { 
     get; 
     set; 
    } 


    public string Title 
    { 
     get 
     { 
      EnsureChildControls(); 
      return _lblHeader.Text; 
     } 
     set 
     { 
      EnsureChildControls(); 
      _lblHeader.Text = value; 
     } 
    } 



    public string CallbackFunction 
    { 
     get; 
     set; 
    } 


    protected Panel Header 
    { 
     get; 
     set; 
    } 

    /// <summary> 
    /// The Main Control of the widget 
    /// </summary> 
    protected Panel Content 
    { 
     get; 
     set; 
    } 

    protected Panel Edit 
    { 
     get; 
     set; 
    } 

    protected Panel Body 
    { 
     get; 
     set; 
    } 

    /// <summary> 
    /// The tag that the control is associated with 
    /// </summary> 
    protected override HtmlTextWriterTag TagKey 
    { 
     get 
     { 
      return HtmlTextWriterTag.Li; 
     } 
    } 


    public BaseWidget() 
    { 
     this.ControlID = 0; 
    }} 

Je ne fait même pas besoin de sérialisation l'un des attributs de la classe de base. J'ai juste besoin de l'id de contrôle et du titre associé sérialisé. Est-il possible de le faire lorsque le contrôle Web n'est pas sérialisable. J'ai essayé DataContractJsonSerializer et JavascriptSerializer sans succès car la classe WebControl n'est pas sérialisable.

Répondre

1

Sur le DataContractJsonSerializer, vous pouvez définir un substitut qui est sérialisé à la place du contrôle (recherchez IDataContractSurrogate pour plus d'informations). Mais si tout ce dont vous avez besoin est de sérialiser ces deux propriétés, il vous sera probablement plus simple de créer simplement une classe de données (DTO?) Avec ces propriétés et de la sérialiser à la place.

public class BaseWidgetDTO 
{ 
    public int ControlID { get; set; } 
    public string Title { get; set; } 
} 
+0

+1 pour la recommandation de l'objet de transfert de données (DTO). – Sumo

Questions connexes