有什么解决方案可以以更好/更短的方式重构以下开关/案例代码?

  • property.ValueJToken
  • opportunity是一个CRM Dynamics实体(类似于字典)

  • 我尝试了以下方法,但未成功(C# Not Acceptable )
    Type target = property.Value.Type.GetType();
    opportunity[property.Key] = property.Value.Value<target>();
    

    这是我要简化的代码。 (JTokenType.ObjectJTokenType.Array的处理方式不同。)
                    switch (property.Value.Type)
                    {
                        case JTokenType.Boolean:
                            opportunity[property.Key] = property.Value.Value<bool>();
                            break;
                        case JTokenType.Date:
                            opportunity[property.Key] = property.Value.Value<DateTime>();
                            break;
                        case JTokenType.Integer:
                            opportunity[property.Key] = property.Value.Value<int>();
                            break;
                        case JTokenType.String:
                            opportunity[property.Key] = property.Value.Value<string>();
                            break;
                        case JTokenType.Guid:
                            opportunity[property.Key] = property.Value.Value<Guid>();
                            break;
                    }
    

    我也按照@diiN_的建议尝试了此操作:
    opportunity[property.Key] = property.Value.Value<dynamic>();
    

    但是它抛出一个InvalidDataContractException:
    c# - 如何基于JTokenType简化JToken的类型转换-LMLPHP

    最佳答案

    您可以尝试使用以下方法来代替switch语句:

    if (property.Value is JValue)
    {
        opportunity[property.Key] = ((JValue)property.Value).Value;
    }
    

    关于c# - 如何基于JTokenType简化JToken的类型转换,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38628460/

    10-15 11:38