将动态对象的字段作为参数传递

时间:2014-01-14 12:28:30

标签: c# dynamic

我有动态对象,由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

由于

2 个答案:

答案 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);
}