如何更新JToken值

时间:2018-01-30 07:46:35

标签: .net

我需要在Jtoken中实现一个更新值的函数:

public  object SetValue(JToken token, string[] pos,string value)

基本上应该这样做:

token[pos[0]][pos[1]][pos[2]]....[pos[n]] = value;

我做了以下事情:

public  object SetValue(JToken token, string[] pos,string value)
{

      JToken Token = token;
      foreach (string pos in position)
      {
        Token = Token[pos];
      }
      Token = value;
      return token.ToString();
}

返回的字符串没有用val更新,你能指出我做错了什么或如何更好地实现这个功能?

感谢。

1 个答案:

答案 0 :(得分:0)

C#中的名称区分大小写,因此tokenToken指的是不同的内容。您的代码正在使用Token,而不会触及token,然后返回token

我相信下面的代码应该做你想要实现的目标。

public object SetValue(JToken token, string[] position, string value)
{    
    JToken Token = token;

    foreach (string pos in position)
    {
        Token[pos] = value;
    }

    return Token.ToString();
}

我建议从这里做一些改进:

  • 避免使用返回类型object。如果可以,请更具体。如果您要返回token返回类型为JToken,如果您要返回token.ToString(),则返回类型为string;
  • 在C#中使用camelCase作为局部变量名称的惯例;
  • 如果在声明变量的同一语句中指定值,则可以使用var而不是JToken类型的全名。静态代码分析器建议使用var

相同的功能改为上面的建议如下:

public string SetValue(JToken token, string[] positions, string value)
{    
    var jtoken = token;

    foreach (var pos in positions)
    {
        jtoken[pos] = value;
    }

    return jtoken.ToString();
}