C# 将动态对象的字段作为参数传递
我有一个动态对象,它由NewtonsoftJson序列化C# 将动态对象的字段作为参数传递,c#,dynamic,C#,Dynamic,我有一个动态对象,它由NewtonsoftJson序列化 var data = JsonConvert.DeserializeObject<dynamic>(settings); 我得到编译错误 错误82开关表达式或大小写标签必须是bool、char、string、integral、enum或相应的可空类型 这不是问题,我只要加上演员阵容就行了 switch ((string)item.name) 现在它编译了。但我得到异常,运行时错误 CS1502:与“System.DateT
var data = JsonConvert.DeserializeObject<dynamic>(settings);
我得到编译错误
错误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
谢谢也许还可以投下物品。价值
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不是运行时错误。这是一个编译错误:
您不会得到异常(运行时错误),而是一个编译错误,告诉您传递的参数类型错误
因此,它与开关相同,只是不同的错误。我将按如下方式使用它:
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);
}
JArray令牌=JArray.Parse(值);
foreach(令牌中的JToken令牌)
{
字符串名称=token.Value(“名称”);
DateTime theDate=DateTime.MinValue;
DateTime.TryParse(token.Value(“Value”),超出日期);
}
是的,我知道,问题不在于它,谢谢,我明白了,谢谢,看起来它是一个开关规范,接受bool、char、string、integral、enum或相应的可空类型,但不是动态的,但它不会在编译时检查类型,正如您前面所说的,因为可能有任何类型我不想得到异常,如果在这种情况下,值不正确,请将TryParse与token.value(“value”)一起使用,如果使用item.value.value
,会发生什么情况?
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);
}