C# Int64在传递给带有SimpleJSON的函数时更改值

C# Int64在传递给带有SimpleJSON的函数时更改值,c#,unity3d,long-integer,simplejson,int64,C#,Unity3d,Long Integer,Simplejson,Int64,我从JSON获取用户ID(int64),然后将它们传递到一个函数中以填充用户数据。但是,一旦我将JSON ID值传递给iEnumerator函数,它就会发生变化。知道为什么会这样吗 我已经打印了这些值,并在传递它们之前确定它们是预期的JSON值 我正在使用GetTeachersStudentList获取ID,并将其传递到populatestudentgames和tutorial。我用来存储ID和数据的字典在调用GetTeachersStudentList之前初始化 IEnumerator Get

我从JSON获取用户ID(int64),然后将它们传递到一个函数中以填充用户数据。但是,一旦我将JSON ID值传递给iEnumerator函数,它就会发生变化。知道为什么会这样吗

我已经打印了这些值,并在传递它们之前确定它们是预期的JSON值

我正在使用
GetTeachersStudentList
获取ID,并将其传递到
populatestudentgames和tutorial
。我用来存储ID和数据的字典在调用
GetTeachersStudentList
之前初始化

IEnumerator GetTeachersStudentList()
{
    //get user information from server call 
    Dictionary<string, string> headers = new Dictionary<string,string>();
    headers.Add("Access-Token", PlayerData.accessToken);
    string url = studentURL += "?staffId=" + PlayerData.currentUser.staffId;

    WWW www = new WWW(url, null, headers);

    yield return www;

    StudentListWebResponse = www.text;
    PlayerData.studentList = StudentListWebResponse; 

    //parse json
    JSONArray students = (JSONArray) JSON.Parse(StudentListWebResponse);
    expectedStudentsToPopulate = students.Count;

    //populate each users data 
    for (int i = 0; i < students.Count; i++)
    {
        string userInformation = students[i].ToString();
        JSONObject studentJsonObject = (JSONObject) JSON.Parse(userInformation);
        foreach (var item in studentJsonObject)
        {
            //look for id, then use that id to populate user data
            if (item.Key == "id")
            {
                StartCoroutine(PopulateStudentGamesAndTutorial(item.Value));
            }
        }
    }

    PlayerData.control.Save();
}

IEnumerator PopulateStudentGamesAndTutorial(Int64 id)
{
    //get games with id 
    Dictionary<string, string> headers = new Dictionary<string,string>();
    headers.Add("Access-Token", PlayerData.accessToken);

    string studentGameURL = serverManager.GamesURL(id);
    WWW gamesWWW = new WWW(studentGameURL, null, headers);
    yield return gamesWWW;  
    PlayerData.StudentListWithGames.Add(id, gamesWWW.text);

    //get tutorials with id 
    string tutorialURL = serverManager.TutorialURL(id);
    WWW wwwGetTutorialsCompleted = new WWW(tutorialURL, null, headers);
    yield return wwwGetTutorialsCompleted;
    JSONArray tutorialArray = (JSONArray) JSON.Parse(wwwGetTutorialsCompleted.text);
    List<int> tutorialIDList = new List<int>();
    for (int i = 0; i < tutorialArray.Count; i++)
    {
        tutorialIDList.Add(tutorialArray[i]["id"]); 
    }
    PlayerData.StudentListWithTutorials.Add(id, tutorialIDList);
    PlayerData.control.Save();
IEnumerator GetteacherStudentList()
{
//从服务器调用获取用户信息
字典头=新字典();
添加(“访问令牌”,PlayerData.accessToken);
字符串url=studentURL+=“?staffId=“+PlayerData.currentUser.staffId;
WWW=新的WWW(url,空,标题);
收益率;
StudentListWebResponse=www.text;
PlayerData.studentList=StudentListWebResponse;
//解析json
JSONArray students=(JSONArray)JSON.Parse(StudentListWebResponse);
expectedStudentsToPopulate=学生数;
//填充每个用户的数据
for(int i=0;i
SimpleJSON将所有简单标量值(如布尔值、数字和字符串)存储为字符串。它提供了访问器属性和运算符,允许您将值提取为多种不同类型

例如:

bool b1 = node.AsBool; 
bool b1 = node; // Calls operator bool which in turn calls AsBool
这意味着在大多数情况下,您可以简单地使用节点,就好像它已经是正确的类型一样

但是,不会自动转换为Int64。如果尝试使用预期为Int64的节点,则最佳匹配将是
operator int
,这将不符合您的要求


解决方案是将其作为字符串传递,并使用
Int64.Parse
Int64.TryParse
将其转换为正确的类型。

您没有理由期望Json支持Int64数字。出于序列化的目的,您需要将此字段定义为字符串。您可能可以使用属性来实现这一点,具体取决于Json的类型b您正在使用。可能的重复:它们的预期值在哪里?它们的区别在哪里?我可以看到您正在将ID传递到许多地方,它们是否都声明为
Int64
?您使用的是什么json库?如果您谈论的是uint64而不是Int64(即:大于
long.MaxValue
):