【问题标题】:JToken type conversion?JToken 类型转换?
【发布时间】: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 类型?

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

【问题讨论】:

    标签: c# arrays json.net


    【解决方案1】:

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

    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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-09
      • 1970-01-01
      • 1970-01-01
      • 2020-04-30
      • 1970-01-01
      • 2019-02-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多