首页 > 解决方案 > 使用 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回来,而是有能力告诉这个特定的属性应该是某种特定的类型。

标签: c#.netjson.net

解决方案


为您想要的属性创建一个预期的 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


推荐阅读