Как JSON сериализовать класс, производный от класса Web Control - PullRequest
0 голосов
/ 24 мая 2011

Кто-нибудь знает, как сериализовать пользовательский элемент управления в JSON, полученный из другого веб-элемента управления. Я продолжаю получать ошибку, что базовый класс не сериализуем. Вот код для производного класса

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;
    }}

Мне даже не нужно сериализовать какие-либо атрибуты в базовом классе. Мне просто нужен контрольный идентификатор и заголовок, связанный с сериализацией. Есть ли способ сделать это, когда веб-контроль не сериализуем. Я безуспешно попробовал DataContractJsonSerializer и JavascriptSerializer, потому что класс WebControl не сериализуем.

1 Ответ

1 голос
/ 24 мая 2011

В DataContractJsonSerializer вы можете определить суррогат, который сериализуется вместо элемента управления (для получения дополнительной информации найдите IDataContractSurrogate).Но если все, что вам нужно, это сериализовать эти два свойства, то вам, вероятно, будет проще создать класс данных (DTO?) С этими свойствами и вместо этого сериализовать его.

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