我正在尝试将包含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; }
}
答案 0 :(得分:1)
您已声明communication
是dynamic
个对象。但是,这并不能免除类型安全。在运行时communication
仍然需要是一个字符串(如错误消息中所述)。
您通过创建变量dynamic
来绕过编译器错误,但在运行时如果变量不是字符串或者可以推断它仍将抛出的转换。
请参阅msdn reference,特别是有关重载决策的标题。
答案 1 :(得分:0)
该代码看起来应该有效。你能说明你如何声明变量Type
?
应该是
var type = typeof(InGameCommunication);