C# 如何从服务器下载文本?

C# 如何从服务器下载文本?,c#,unity3d,server,C#,Unity3d,Server,我需要从服务器下载一个JSON,并在代码中反序列化以使用它 我知道,我需要一个团结的世界和一个共同的计划。我有两种理解。 我可以启动一个例程,向服务器发送一个请求,并在被调用的协同例程中处理接收到的数据,或者 我可以启动例程,发送请求并将结果保存到类私有变量。在这段时间内,在start例程之后,我可以执行while(变量==null),然后在调用者方法中处理数据 private void Start() { StartCoroutine(LoadPagesId("Some

我需要从服务器下载一个JSON,并在代码中反序列化以使用它

我知道,我需要一个团结的世界和一个共同的计划。我有两种理解。 我可以启动一个例程,向服务器发送一个请求,并在被调用的协同例程中处理接收到的数据,或者 我可以启动例程,发送请求并将结果保存到类私有变量。在这段时间内,在start例程之后,我可以执行while(变量==null),然后在调用者方法中处理数据

private void Start()
    {
        StartCoroutine(LoadPagesId("SomeURL.com"));
    }

    private IEnumerator LoadPagesId(string url)
    {
        var request = UnityWebRequest.Get(url);
        yield return request.SendWebRequest();

        var data = request.downloadHandler.text;
        request.Dispose();

        // Do something with data
    }


没有全局变量和扩展的加载方法,还有其他方法吗?

是的,您可以简单地添加回调:

private void Start()
{
    StartCoroutine(LoadPagesId("SomeURL.com"), HandleSuccess, HandleError);

    // Or as lambda expressions
    StartCoroutine(LoadPagesId("SomeURL.com"), success => {
       // do something with success
    }, error => {
       // do something with error
    });
}

private IEnumerator LoadPagesId(string url, Action<string> successCallback, Action<string> errorCallback)
{
    var request = UnityWebRequest.Get(url);
    yield return request.SendWebRequest();

    if(www.error)
    {
        errorCallback?.Invoke(www.error);
    } 
    else
    {
        successCallback?.Invoke(request.downloadHandlet.text);
    }
}

private void HandleSuccess(string result)
{
    // Do something
}

private void HandleError(string error)
{
    // Do something
}
private void Start()
{
start例程(LoadPagesId(“SomeURL.com”)、HandleSuccess、HandleError;
//或者作为lambda表达式
Start例程(LoadPagesId(“SomeURL.com”),成功=>{
//做一些成功的事情
},错误=>{
//做错事
});
}
私有IEnumerator LoadPagesId(字符串url、操作成功回调、操作错误回调)
{
var request=UnityWebRequest.Get(url);
生成返回请求。SendWebRequest();
如果(www.error)
{
errorCallback?.Invoke(www.error);
} 
其他的
{
successCallback?.Invoke(request.downloadHandlet.text);
}
}
私有void HandleSuccess(字符串结果)
{
//做点什么
}
私有无效句柄错误(字符串错误)
{
//做点什么
}
private void Start()
{
    StartCoroutine(LoadPagesId("SomeURL.com"), HandleSuccess, HandleError);

    // Or as lambda expressions
    StartCoroutine(LoadPagesId("SomeURL.com"), success => {
       // do something with success
    }, error => {
       // do something with error
    });
}

private IEnumerator LoadPagesId(string url, Action<string> successCallback, Action<string> errorCallback)
{
    var request = UnityWebRequest.Get(url);
    yield return request.SendWebRequest();

    if(www.error)
    {
        errorCallback?.Invoke(www.error);
    } 
    else
    {
        successCallback?.Invoke(request.downloadHandlet.text);
    }
}

private void HandleSuccess(string result)
{
    // Do something
}

private void HandleError(string error)
{
    // Do something
}