如何将我的webapi响应解析为有用的模型?
这是我的api电话:
IEnumerator GetQuestion(){
string input = new QuestionThemeRequest(){ QuestionTheme = "BAJS" }.ToString();
Hashtable headers = new Hashtable();
headers.Add("Content-Type", "application/json");
byte[] body = Encoding.UTF8.GetBytes (input);
WWW www = new WWW ("http://localhost:52603/api/Question/GetRandomQuestionByTheme", body, headers);
yield return www;
}
在这里
public class Question{
public int Id { get; set; }
public string Answere { get; set; }
}
我试过这样的事情:
Question q = new Question();
q = GetQuestion();
但这似乎不起作用。
答案 0 :(得分:1)
它基于服务器响应的内容。
如果它是JSON,您可以使用SimpleJSON来解析它。
@MX D解决了您的延迟问题。
这是示例代码但不要忘记我假设您的www.text是JSON类型。
using SimpleJSON;
IEnumerator GetQuestion(){
string input = new QuestionThemeRequest(){ QuestionTheme = "BAJS" }.ToString();
Hashtable headers = new Hashtable();
headers.Add("Content-Type", "application/json");
byte[] body = Encoding.UTF8.GetBytes (input);
WWW www = new WWW ("http://localhost:52603/api/Question/GetRandomQuestionByTheme", body, headers);
yield return www;
if((!string.IsNullOrEmpty(www.error))) {
print( "Error downloading: " + www.error );
} else {
JSONNode questionJSON = JSONNode.Parse (www.text);
Question q = new Question();
q.Id = questionJSON["id"];
q.Answere = questionJSON["Answere"];
}
}
更好的解决方案是
using SimpleJSON;
public YourClass : MonoBehaviour{
public delegate void WWWCalback(WWW wwwData);
private void answersCallback(WWW wwwData){
JSONNode questionJSON = JSONNode.Parse (wwwData.text);
Question q = new Question();
q.Id = questionJSON["id"];
q.Answere = questionJSON["Answere"];
}
private void getAnswers(){
StartCoroutine(GetQuestion(answersCallback));
}
IEnumerator GetQuestion(WWWCalback callback){
string input = new QuestionThemeRequest(){ QuestionTheme = "BAJS" }.ToString();
Hashtable headers = new Hashtable();
headers.Add("Content-Type", "application/json");
byte[] body = Encoding.UTF8.GetBytes (input);
WWW www = new WWW ("http://localhost:52603/api/Question/GetRandomQuestionByTheme", body, headers);
yield return www;
if((!string.IsNullOrEmpty(www.error))) {
print( "Error downloading: " + www.error );
} else {
callback(www);
}
}
}
像那样。可能会出现一些语法或其他问题。我不检查它。
答案 1 :(得分:0)
您提供的代码无法运行,因为您试图将其称为无效代码。但它是一个Coroutine(IEnumerator)。为了正确运行,您需要启动协同程序,可以按照以下步骤进行操作
StartCoroutine(GetQuestion());
或
StartCoroutine("GetQuestion");
请记住,从5.0开始,第二个选项将不再可行
有关协同程序的更多信息,请查看unity docs