【发布时间】:2015-12-27 03:40:09
【问题描述】:
我有一个包含参数/值对的 JObject(例如“param1”:“aValue”)。我想从数据网格中捕获的数据中更新这些值。
然后根据定义以下类型的 JSON 模式验证参数值:“字符串”、“整数”和“数组”(类型为“字符串”)。
只要参数值是字符串类型,我的代码就可以正常工作。对于整数和数组,我收到以下错误:
// 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);
}
..
有了这段代码,我现在可以处理“字符串”和“整数”,但我需要另一种自定义方法来处理“数组”(“字符串”类型)或我将来可能使用的任何其他类型。对此不满意...
我的自定义 convertTokenToInt(newToken) 例程只是将值分配给 int,然后将其重新分配回 JToken。
..
int number;
bool result = int.TryParse(aToken.ToString(), out number);
if (result)
{
aToken = number;
return aToken;
}
..
这似乎表明 JToken 可以进行隐式类型转换,那么为什么我不能使用强制转换或 ConvertTo() 或其他更传统的方式将数据网格单元格值映射到适当的 JToken 类型?
感谢任何帮助解决这个简单问题:-)
【问题讨论】: