我有一个包含参数/值对的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类型?
感谢您解决这个简单问题的任何帮助: - )
答案 0 :(得分:0)
...这是我的转换方法,但也许有更优雅的解决方案...
res