我有动态对象,由NewtonsoftJson序列化
var data = JsonConvert.DeserializeObject<dynamic>(settings);
我是从字符串中获取的
[{"name":"MinDate","value":"01/01/2014"},{"name":"MaxDate","value":"01/31/2014"}]
我在代码中使用它
var minDate = DateTime.MinValue;
var maxDate = DateTime.MaxValue;
foreach (var item in data)
{
switch (item.name)
{
case CustomFieldConstants.MinDate:
DateTime.TryParse(item.value, out minDate);
break;
case CustomFieldConstants.MaxDate:
DateTime.TryParse(item.value, out maxDate);
break;
}
}
我收到编译错误
错误82开关表达式或大小写标签必须是bool,char,string,integral,enum或相应的可空类型
这不是我必须添加演员
的问题switch ((string)item.name)
现在它编译。但我得到异常,运行时错误。
CS1502:'System.DateTime.TryParse(string,out System.DateTime)\'的最佳重载方法匹配有一些无效的参数
我不清楚为什么它不包含像switch这样的编译错误,当我不像这样投出它时
DateTime.TryParse((string)item.value, out minDate);
?
请注意,item.value
的类型为Newtonsoft.Json.Linq.JValue
由于
答案 0 :(得分:2)
也许还会施放item.value?
var minDate = DateTime.MinValue;
var maxDate = DateTime.MaxValue;
foreach (var item in data)
{
switch (item.name)
{
case CustomFieldConstants.MinDate:
DateTime.TryParse((string)item.value, out minDate);
break;
case CustomFieldConstants.MaxDate:
DateTime.TryParse((string)item.value, out maxDate);
break;
}
}
编辑:哦,对不起,我最初误读了你的问题。
CS1502不是运行时错误。这是一个编译错误:
http://msdn.microsoft.com/en-us/library/b66k5sz9.aspx
您没有收到异常(运行时错误),而是一个编译错误,告诉您传递了错误的类型参数。
因此它与交换机相同,只是一个不同的错误。
答案 1 :(得分:1)
我会按如下方式使用它:
JArray tokens = JArray.Parse(value);
foreach (JToken token in tokens)
{
string name = token.Value<string>("name");
DateTime theDate = DateTime.MinValue;
DateTime.TryParse(token.Value<string>("value"), out theDate);
}