1
我有一個包含參數/值對的JObject(例如「param1」:「aValue」)。我想從數據網格中捕獲的數據更新這些值。JToken類型轉換?
然後根據定義以下類型的JSON模式對參數值進行驗證:「string」,「integer」和「array」(類型爲「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);
}
..
有了這個代碼,我現在可以處理「字符串」和「整數」,但我需要另一種「數組」(類型爲「字符串」)或我將來可能使用的其他類型的自定義方法。對此不滿意...
我的自定義convertTokenToInt(newToken)例程只是將該值賦給一個int,然後將其重新分配回JToken。
..
int number;
bool result = int.TryParse(aToken.ToString(), out number);
if (result)
{
aToken = number;
return aToken;
}
..
這似乎表明隱式類型轉換是可能的JToken的,所以爲什麼我不能用澆鑄或的ConvertTo()或一些其他映射數據網格單元格的值到適當的JToken類型更傳統的方式是什麼?
感謝所有幫助解決這個簡單的問題:-)