当我将JSON对象从DocumentDB序列化出来时,我的Control不能反序列化为具有Options属性的OptionsControl。
我有以下类Control:
我还有一个
我使用 Azure 中的文档资源管理器将此 JSON 放入 DocumentDB 集合中的“文档”中:
当我从DocumentDB中提取数据时,我尝试将其序列化为我的
我有以下类Control:
public class Control : IControl
{
public Guid Id { get; set; }
public virtual Enums.ControlType Type { get; set; }
public string PropertyName { get; set; }
public string ControlCssClass { get; set; }
public string Description { get; set; }
}
我还有一个继承自Control
的OptionsControl
:
public class OptionsControl : Control
{
public IDictionary<string, string> Options;
}
我还有一个
ClickableControl
:public class ClickableControl : Control
{
public string Url { get; set; }
public string UrlTarget { get; set; }
}
我使用 Azure 中的文档资源管理器将此 JSON 放入 DocumentDB 集合中的“文档”中:
document
和 collection
是 Azure 的文档数据库中的术语。Rows:
[
{
Controls:
[
{
"PropertyName": "Relationship",
"ControlCssClass": "",
"Description": "",
"Type": 3,
"Options": [
{
"Key": "Spouse",
"Value": "Spouse"
},
{
"Key": "Child",
"Value": "Child"
},
{
"Key": "Step-child",
"Value": "Step-child"
}
],
}
]
}
]
当我从DocumentDB中提取数据时,我尝试将其序列化为我的
Row
类:public class Row
{
public IList<Control> Controls { get; set; }
}
我需要能够将任何类型的 "控件" 放入我的 DocDB 控件列表中,并让 C# 将该列表反序列化回适当的 Control
类(无论是基本的 Control
类,还是其中一个派生类,如 OptionsControl
或 ClickableControl
)。
问题在于,由于我正在反序列化为 Control
,因此我得到了 Control 上的所有属性,除了 Options
。或者如果我尝试反序列化具有 Url
和 UrlTarget
的控件,则只会得到基本的 Control 属性,而不是 URL 属性。我以为 C# 会处理将反序列化对象转换为 OptionsControl 或 ClickableControl,但我想这是不正确的?我需要做什么才能使来自 DocumentDB 的 JSON 对象正确序列化并转换为 OptionsControl
(具有 Options 属性),而不仅仅是基本的 Control?
OptionsControl
? - user47589Control
类型的实现,而无需在编译时指定它。 - undefinedType
,如果你的序列化 API 支持的话,告诉它将你的控制反序列化为该特定类型。 - undefined