我正在编写一个进化算法但我在编写XML文件中的某些项目时遇到了麻烦。我收到的错误是
InvalidOperationException:参数对象的类型 ' ExperimentSettings'不是原始的。
这是我正在使用的代码(我遗漏了一些有效且无论如何与此问题无关的方法):
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using UnityEngine.UI;
using System.IO;
using System.Xml;
using System.Xml.Serialization;
public class SerializerTest : MonoBehaviour {
public GameObject spawner;
// Use this for initialization
void Start () {
GetComponent<Button>().onClick.AddListener(delegate { Save(false, 0, 50, 5, 5, 50, 5, new Vector3(0, 20, 0), new System.IO.DirectoryInfo("/Experiments/Test #0"), spawner.GetComponent<CreatureGenerator>()); });
}
// Use this for initialization
void Save(
bool startCreatures,
int experimentType,
int totalCreaturesNo,
int cycles,
float experimentDuration,
float survivorsPercentage,
float probabilityOfMutation,
Vector3 creaturesStartingPosition,
DirectoryInfo saveFolder,
CreatureGenerator generator
)
{
//create file where to save the settings
string settingsFile = Application.dataPath + saveFolder + "/settings_and_parameters.xml";
if (File.Exists(settingsFile))
{
File.Delete(settingsFile);
}
XmlSerializer settingsSerializer = new XmlSerializer(typeof(Creature));
FileStream settingsStream = new FileStream(settingsFile, FileMode.Create);
//save the settings
ExperimentSettings thisExperiment = new ExperimentSettings()
{
startCreatures = startCreatures,
experimentType = experimentType,
totalCreaturesNo = totalCreaturesNo,
cycles = cycles,
experimentDuration = experimentDuration,
survivorsPercentage = survivorsPercentage,
probabilityOfMutation = probabilityOfMutation,
creaturesStartingPosition = creaturesStartingPosition,
saveFolder = new DirectoryInfo(saveFolder.ToString()),
experimentScene = UnityEngine.SceneManagement.SceneManager.GetActiveScene().name
};
settingsSerializer.Serialize(settingsStream, thisExperiment);
//close the file
settingsStream.Close();
}
}
在“开始”功能中,我只需设置一个按钮,单击该按钮可保存带有一些任意参数的文件。我会把那些代码留在那里,但它与错误不太相关。
这是在序列化时返回错误的类:
[System.Serializable]
public class ExperimentSettings
{
public bool startCreatures;
public int experimentType;
public int totalCreaturesNo;
public int cycles;
public float experimentDuration;
public float survivorsPercentage;
public float probabilityOfMutation;
public Vector3 creaturesStartingPosition;
public DirectoryInfo saveFolder;
public string experimentScene;
}
令我感到困惑的是,我尝试以同样的方式在同一方法中序列化另一个类,就像它实际工作一样。下一个代码块是正确序列化的类:
[System.Serializable]
public class Creature
{
public string creaturePrefab;
public double result;
public bool passed;
}
我尝试从ExperimentSettings
删除所有变量,留下一个空类,但它仍然无法正常工作。我全力以赴,非常感谢任何帮助!
答案 0 :(得分:2)
解决! 在行
XmlSerializer settingsSerializer = new XmlSerializer(typeof(Creature));
我从我自己的代码中复制粘贴,但我忘了更改课程,所以要解决这个特殊问题,我必须这样编辑这一行
XmlSerializer settingsSerializer = new XmlSerializer(typeof(ExperimentSettings));