JToken类型转换?

时间:2015-12-27 03:40:09

标签: c# arrays json.net

我有一个包含参数/值对的JObject(例如" param1":" aValue")。我想从数据网格中捕获的数据更新这些值。

然后根据定义以下类型的JSON模式验证参数值:" string"," integer"和"阵列" (类型"字符串")。

只要参数值是string类型,我的代码就可以正常工作。对于整数和数组,我收到以下错误:

// parameter validation code
..
IList<string> messages;
bool result = Params.IsValid(paramSchema, out messages);
..
// "Validation error: Invalid type. Expected Integer but got String"
// I get a corresponding error for type "Array"

很公平,然后我添加了一个开关来获取原始类型,因此我可以相应地转换新值:

..
foreach (DataGridViewRow row in Param.Rows)
{
    // get current value 
    JToken curToken = aJObject.GetValue(aDatagrid.row.Cells[0].Value.ToString());

    // get new value
    JToken newToken = aDatagrid.row.Cells[1].Value.ToString();

    switch (currToken.Type)
    {
        case JTokenType.Integer:
            newToken = convertTokenToInt(newToken); // ==> works but custom method
            break;
        case JTokenType.Array:
            newToken = (JTokenType.Array)newToken; // ==> casting does not work!
            break;
    }

    currToken.Replace(newToken);
}
.. 

使用此代码,我现在可以处理&#34;字符串&#34;和&#34;整数&#34;但是我需要另一种自定义方法用于&#34;数组&#34; (类型&#34;字符串&#34;)或我将来可能使用的任何其他类型。不满意......

我的自定义convertTokenToInt(newToken)例程只是将值赋给int,然后将其重新分配给JToken。

.. 
int number;

bool result = int.TryParse(aToken.ToString(), out number);

if (result)
{
    aToken = number;
    return aToken;
}
..

这似乎表明JToken可以进行隐式类型转换,那么为什么我不能使用cast或ConvertTo()或其他更传统的方法将datagrid单元格值映射到适当的JToken类型?

感谢您解决这个简单问题的任何帮助: - )

1 个答案:

答案 0 :(得分:0)

...这是我的转换方法,但也许有更优雅的解决方案...

res