gpt4 book ai didi

c# - JToken 类型转换?

转载 作者:太空宇宙 更新时间:2023-11-03 15:28:17 26 4
gpt4 key购买 nike

我有一个包含参数/值对的 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 类型?

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

最佳答案

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

private JToken convertTokenToArray(JToken aToken)
{
JArray arr = new JArray();
List<string> items = JsonConvert.DeserializeObject<List<string>>(aToken.ToString());

foreach (var item in items)
{
JToken i = item;
arr.Add(i);
}

return arr;
}

关于c# - JToken 类型转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34477382/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com