修改:已解决,请参阅下文。
我正在用C#编写Web API。端点收到以下对象:
public class MiscData
{
public Dictionary<string, List<dynamic>> data { get; set; }
}
在List<>
内,可能有三个不同类别(FormA
,FormB
和FormC
)的数据。我将找出使用密钥的哪一个(<string>
内的Dictionary
)。
然后我需要将dynamic
对象转换为实际类型,这就是我被卡住的地方。
我已经尝试过(这是简化的代码,没有循环遍历字典和列表,也没有使用key
的条件):
dynamic obj = data.data["FormA"][0];
//fails
var converted = (FormA) obj;
//fails
var converted = (FormA) JsonConvert.DeserializeObject(obj, typeof(FormA));
如何将Web API接收的动态对象强制转换为特定的对象类型?
解决方案:
我的问题是类型(FormA)包含一个enum,它显然会破坏反序列化器。
这里的代码效果很好:
foreach (JToken obj in data.data["FormA"])
{
var json = obj.ToString();
var converted = JsonConvert.DeserializeObject(json, typeof(FormA));
}