0

我正在尝试将包含 JSON 数据的动态对象转换为自定义 c# 对象并得到以下错误:

RuntimeBinderException Newtonsoft.Json.JsonConvert.DeserializeObject(string, System.Type, params Newtonsoft.Json.JsonConverter[])' 的最佳重载方法匹配有一些无效参数

名为的变量communication是一个dynamic对象,包含以下值(JSON 数据):

{
  "name": "inGame",
  "selected": true,
  "image": "assets/img/communication/ingame.png"
}

这是应该将动态转换为自定义 c# 对象的代码:

InGameCommunication  inherited = JsonConvert.DeserializeObject(communication, typeof(InGameCommunication),
                                                          new JsonSerializerSettings());

类层次结构:

public abstract class Communication
{
    public int Id { get; set; }
    public string Name { get; set; }
    public bool Selected { get; set; }
}

public class InGameCommunication : Communication
    {
    }

public class SkypeCommunication : Communication
{
    public string Username { get; set; }
}
4

2 回答 2

1

你已经说过这communication是一个dynamic对象。但是,这并不能免除您的类型安全。在运行时communication仍然需要是一个字符串(如错误消息中所述)。

您通过创建变量来绕过编译器错误,dynamic但在运行时,如果变量不是字符串或可以推断的转换,它仍然会抛出。

请参阅msdn 参考,特别是有关重载解决方案的标题。

于 2013-10-04T22:19:07.237 回答
0

该代码看起来应该可以工作。你能展示你是如何声明变量的Type吗?

它应该是这样的

var type = typeof(InGameCommunication);
于 2013-10-04T21:29:55.643 回答