我是Unity / C#的新手,很难将两个对象转换为JSON。
目标是构建一个如下所示的JSON对象:
Question question = new Question();
question.setStudentPin(pin);
ServerRequest request = new ServerRequest();
request.setOperation(Constants.PIN_OPERATION);
//set the values entered for the pin entered
request.setQuestion(question);
String json = gson.toJson(request);
在Java中,我只需执行以下操作:
//Creating a new Question object
Question question = new Question();
question.studentPin = pinNumber.text;
ServerRequest request = new ServerRequest();
request.operation = Constants.PIN_OPERATION;
//set the values entered for the pin entered
request.question = question;
string json = JsonConvert.SerializeObject(request);
但是,当我在C#中执行以下操作时
public class Question : MonoBehaviour {
public string studentPin;
}
我收到以下错误:
JsonSerializationException:检测到属性的自引用循环问题'使用类型'问题'。路径
我已经搜索了这个错误,并且理解这通常发生在您的模型类中有一个返回父对象的引用,并且该父对象有一个返回其子对象的引用,这会在序列化期间导致循环引用。
但是,我不确定我究竟能如何解决这些问题。
我的问题课程设置如下:
public class ServerRequest : MonoBehaviour {
public string operation;
public Question question;
}
我的ServerRequest类设置如下:
{{1}}
非常感谢任何帮助或指导。
答案 0 :(得分:1)
JsonUtility.ToJson()
。Question
和ServerRequest
主要用于存储数据,请考虑不要从MonoBehaviour
继承它。总之:
[System.Serializable]
public class Question {
public string studentPin;
}
[System.Serializable]
public class ServerRequest {
public string operation;
public Question question;
}
//Do your instantiation, setups, etc as above.
string json = JsonUtility.ToJson(request);
详细了解Unity的序列化here。
答案 1 :(得分:0)
您应该使用JsonSerializaerSettings
类并设置基于参考的序列化:
JsonSerializerSettings settings = new JsonSerializerSettings
{
PreserveReferencesHandling = PreserveReferencesHandling.All,
ReferenceLoopHandling = ReferenceLoopHandling.Serialize
};
string json = JsonConvert.SerializeObject(request, settings);