c# - 使用 IDictionary 将 JSON 反序列化为复合模型
问题描述
我有一个复合模型
public class Composite
{
public SubType1 Property1 {get;set}
public SubType2 Property2 {get;set}
public IDictionary<string, object> Property3 {get;set}
}
当 WEB API 水合它时,Property3
包含ExpandoObject
. 然后这个复合类型进入 Stage1 处理,最后它以 DB 中的 JSON 形式结束。在 Stage2 中,它被从 DB 中拉出并像这样序列化
Composite comp = JsonConvert.DeserializeObject<Composite>(json);
此时comp.Property3
是类型Dictionary<string, object>
有没有办法告诉您在每种特定情况下需要该属性JsonConvert
的哪个实现?IDictionary<string, object>
向前跳跃,我可以说,我不是想ExpandoObject
回来,而是有能力告诉这个特定的属性应该是某种特定的类型。
解决方案
为您想要的属性创建一个预期的 json 返回对象。然后使用JavaScriptSerializer.ConvertToType<yourobject>
. 这将尝试将 json 响应转换为您的自定义对象。
*您可以从您的对象中删除不需要/不需要的项目。所以如果json返回比较复杂,只创建自己需要的对象。如果 json 返回指示它,您将不得不使用子对象构建自定义对象。
例如
{ dogs:[
dog:{
hair:yes,
legs:[
{FLleg:yes,
FRleg:yes,
RLleg:no,
RRleg:no}
]
}
dog:{
hair:no,
legs:[
{FLleg:yes,
FRleg:yes,
RLleg:yes,
RRleg:yes}
]
}
]
}
bool
您将需要一个具有 的属性和hair
数组的dog 对象legs
。
推荐阅读
- java - 如何在我在 android studio 中的第二个活动中显示单击的单选按钮值?
- postgresql - org.postgresql.util.PSQLException:错误:“和”处或附近的语法错误
- php - 如何在 JSON 中为两个不同表中的类别检查 1 或 0 提供响应?
- hexo - 如何在 Hexo 博客中添加 RSS 提要
- watson-studio - ImportError:Watson Studio 上没有名为“cv2”的模块
- android - 不可触摸的搜索栏但显示进度
- intellij-idea - 升级后无法启动 IntelliJ IDEA
- c - C 不兼容的类型结构返回
- python - 如何从python中的特定列中读取值?
- powershell - 未找到调用 sql cmdlet/batchparser.dll