有没有人知道如何将自定义控件序列化为从另一个Web控件派生的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;
}}
我实际上甚至不需要序列化基类中的任何属性。我只需要控制ID和序列化相关的标题。当Web Control不可序列化时,有没有办法做到这一点。我试过DataContractJsonSerializer和JavascriptSerializer没有运气,因为WebControl类不可序列化。
答案 0 :(得分:1)
在DataContractJsonSerializer上,您可以定义代替控件的代理项(有关更多信息,请搜索IDataContractSurrogate)。但是,如果您只需要序列化这两个属性,那么您可以更简单地使用这些属性创建数据类(DTO?)并将其序列化。
public class BaseWidgetDTO
{
public int ControlID { get; set; }
public string Title { get; set; }
}