使用Newtonsoft.Jsonconverter或其他方式将动态对象转换为类型

时间:2017-03-10 13:08:43

标签: c# asp.net-web-api casting json.net deserialization

修改:已解决,请参阅下文。

我正在用C#编写Web API。端点收到以下对象:

public class MiscData
{
    public Dictionary<string, List<dynamic>> data { get; set; }
}

List<>内,可能有三个不同类别(FormAFormBFormC)的数据。我将找出使用密钥的哪一个(<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));
        }

0 个答案:

没有答案