JsonUtility.FromJson 不断抛出 ArgumentException
JsonUtility.FromJson keeps throwing ArgumentException
我正在尝试从我的统一项目中的后端接收数据,数据如下所示:
{"subjectid":98,"name":"test23","first_name":"test23","date_of_birth":"1998-02-16","age":23}
我正在使用以下行将数据放入对象中:
PatientBackend patient = JsonUtility.FromJson<PatientBackend>(responseBody);
对象看起来像这样:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[System.Serializable]
public class PatientBackend : MonoBehaviour
{
public int subjectid;
public string name;
public string first_name;
public string date_of_birth;
public int age;
public PatientBackend(string name, string first_name, string date_of_birth)
{
this.name = name;
this.first_name = first_name;
this.date_of_birth = date_of_birth;
}
}
但是每次调用它都会抛出以下异常:
System.ArgumentException: Cannot deserialize JSON to new instances of type 'PatientBackend.'
at UnityEngine.JsonUtility.FromJson (System.String json, System.Type type) [0x00056] in <5070e0347dee4c9faba7201166fbed9d>:0
at UnityEngine.JsonUtility.FromJson[T] (System.String json) [0x00001] in <5070e0347dee4c9faba7201166fbed9d>:0
at DataService+<createPatient>d__8.MoveNext () [0x0021b] in C:\Users\diete\Documents\Stage\bedrijf_CLEAN-CLONE\VRStrokeRehabilitation\Unity\UnityProject\Assets\Scripts\DataService.cs:87
UnityEngine.Debug:Log(Object)
<createPatient>d__8:MoveNext() (at Assets/Scripts/DataService.cs:90)
有谁知道为什么这不起作用?
PatientBackend
不应该是 MonoBehaviour。 JsonUtility 只能用于数据 类。 MonoBehaviours 是需要附加到游戏对象的组件。您不能简单地“创建”一个实例,这就是它失败的原因。
您不能通过 JsonUtility 创建 MonoBehaviour
的实例。 MonoBehaviour
只有附加到 GameObject
.
才有意义
也不允许 MonoBehaviour
实现构造函数。
要么根本不把它变成 MonoBehaviour
。而是使用
[System.Serializable]
public class PatientBackend
{
public int subjectid;
public string name;
public string first_name;
public string date_of_birth;
public int age;
public PatientBackend(string name, string first_name, string date_of_birth)
{
this.name = name;
this.first_name = first_name;
this.date_of_birth = date_of_birth;
}
}
和
var patientBackend = JsonUtility.FromJson<PatientBackend>(jsonString);
或者如果您真的需要它作为 MonoBehaviour
而不是使用 JsonUtility.FromJsonOverwrite
以便仅覆盖现有实例的字段。
public class PatientBackend : MonoBehaviour
{
public int subjectid;
public string name;
public string first_name;
public string date_of_birth;
public int age;
}
和
JsonUtility.FromJsonOverwrite(jsonString, existingpatientBackend);
我正在尝试从我的统一项目中的后端接收数据,数据如下所示:
{"subjectid":98,"name":"test23","first_name":"test23","date_of_birth":"1998-02-16","age":23}
我正在使用以下行将数据放入对象中:
PatientBackend patient = JsonUtility.FromJson<PatientBackend>(responseBody);
对象看起来像这样:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[System.Serializable]
public class PatientBackend : MonoBehaviour
{
public int subjectid;
public string name;
public string first_name;
public string date_of_birth;
public int age;
public PatientBackend(string name, string first_name, string date_of_birth)
{
this.name = name;
this.first_name = first_name;
this.date_of_birth = date_of_birth;
}
}
但是每次调用它都会抛出以下异常:
System.ArgumentException: Cannot deserialize JSON to new instances of type 'PatientBackend.'
at UnityEngine.JsonUtility.FromJson (System.String json, System.Type type) [0x00056] in <5070e0347dee4c9faba7201166fbed9d>:0
at UnityEngine.JsonUtility.FromJson[T] (System.String json) [0x00001] in <5070e0347dee4c9faba7201166fbed9d>:0
at DataService+<createPatient>d__8.MoveNext () [0x0021b] in C:\Users\diete\Documents\Stage\bedrijf_CLEAN-CLONE\VRStrokeRehabilitation\Unity\UnityProject\Assets\Scripts\DataService.cs:87
UnityEngine.Debug:Log(Object)
<createPatient>d__8:MoveNext() (at Assets/Scripts/DataService.cs:90)
有谁知道为什么这不起作用?
PatientBackend
不应该是 MonoBehaviour。 JsonUtility 只能用于数据 类。 MonoBehaviours 是需要附加到游戏对象的组件。您不能简单地“创建”一个实例,这就是它失败的原因。
您不能通过 JsonUtility 创建 MonoBehaviour
的实例。 MonoBehaviour
只有附加到 GameObject
.
也不允许 MonoBehaviour
实现构造函数。
要么根本不把它变成 MonoBehaviour
。而是使用
[System.Serializable]
public class PatientBackend
{
public int subjectid;
public string name;
public string first_name;
public string date_of_birth;
public int age;
public PatientBackend(string name, string first_name, string date_of_birth)
{
this.name = name;
this.first_name = first_name;
this.date_of_birth = date_of_birth;
}
}
和
var patientBackend = JsonUtility.FromJson<PatientBackend>(jsonString);
或者如果您真的需要它作为 MonoBehaviour
而不是使用 JsonUtility.FromJsonOverwrite
以便仅覆盖现有实例的字段。
public class PatientBackend : MonoBehaviour
{
public int subjectid;
public string name;
public string first_name;
public string date_of_birth;
public int age;
}
和
JsonUtility.FromJsonOverwrite(jsonString, existingpatientBackend);